1)JVM 内存分别:
- 要领区(线程共享):常量、静态变量、JIT(即时编译器) 编译后的代码也都在要领区;
- 堆内存(线程共享):垃圾接纳的首要场合;
- 措施计数器: 当前列程执行的字节码的位置指示器;
- 假造机栈(栈内存):生涯局部变量、根基数据范例变量以及堆内存中某个工具的引用变量;
- 当处所法栈 :为 JVM 提供行使 native 要领的处事。
2)相同-Xms、-Xmn 这些参数的寄义:
答:
堆内存分派:
- JVM 初始分派的内存由-Xms 指定,默认是物理内存的 1/64;
- JVM 最大分派的内存由-Xmx 指定,默认是物理内存的 1/4;
- 默认空余堆内存小于 40% 时,JVM 就会增大堆直到-Xmx 的最大限定;空余堆内存大于 70% 时,JVM 会镌汰堆直到 -Xms 的最小限定;
- 因此处事器一样平常配置-Xms、-Xmx 相称以停止在每次 GC 后调解堆的巨细。工具的堆内存由称为垃圾接纳器的自动内存打点体系接纳。
非堆内存分派:
- JVM 行使-XX:PermSize 配置非堆内存初始值,默认是物理内存的 1/64;
- 由 XX:MaxPermSize 配置最大非堆内存的巨细,默认是物理内存的 1/4;
- -Xmn2G:配置年青代巨细为 2G;
- -XX:SurvivorRatio,配置年青代中 Eden 区与 Survivor 区的比值。
3)垃圾接纳算法有哪些?
答:
- 引用计数 :道理是此工具有一个引用,即增进一个计数,删除一个引用则镌汰一个计数。垃圾接纳时,只用网络计数为 0 的工具。此算法最致命的是无法处理赏罚轮回引用的题目;
- 标志-破除 :此算法执行分两阶段。第一阶段从引用根节点开始标志全部被引用的工具,第二阶段遍历整个堆,把未标志的工具破除;
此算法必要停息整个应用,同时,会发生内存碎片;
- 复制算法 :此算法把内存空间划为两个相称的地区,每次只行使个中一个地区。垃圾接纳时,遍历当前行使地区,把正在行使中的工具复制到其它一个地区中;
此算法每次只处理赏罚正在行使中的工具,因此复制本钱较量小,同时复制已每每后还能举办响应的内存清算,不会呈现 “碎片” 题目。虽然,此算法的弱点也是很明明的,就是必要两倍内存空间;
- 标志-清算 :此算法团结了 “标志-破除” 和 “复制” 两个算法的利益。也是分两阶段,第一阶段从根节点开始标志全部被引用工具,第二阶段遍历整个堆,把破除未标志工具而且把存活工具 “压缩” 到堆的个中一块,按次序排放。
此算法停止了 “标志-破除” 的碎片题目,同时也停止了 “复制” 算法的空间题目。
4)root 搜刮算法中,哪些可以作为 root?
答:
- 被启动类(bootstrap 加载器)加载的类和建设的工具;
- JavaStack 中的引用的工具 (栈内存中引用的工具);
- 要领区中静态引用指向的工具;
- 要领区中常量引用指向的工具;
- Native 要领中 JNI 引用的工具。
5)GC 什么时辰开始?
答:GC 常常产生的地区是堆区,堆区还可以细分为新生代、晚年月,新生代还分为一个 Eden 区和两个 Survivor 区。
- 工具优先在 Eden 平分派,当 Eden 中没有足够空间时,假造机将产生一次 Minor GC,由于 Java 大大都工具都是朝生夕灭,以是 Minor GC 很是频仍,并且速率也很快;
- Full GC,产生在晚年月的 GC,当晚年月没有足够的空间时即产生 Full GC,产生 Full GC 一样平常城市有一次 Minor GC。
大工具直接进入晚年月,如很长的字符串数组,假造机提供一个;XX:PretenureSizeThreadhold 参数,令大于这个参数值的工具直接在晚年月平分派,停止在 Eden 区和两个 Survivor 区产生大量的内存拷贝;
- 产生 Minor GC 时,假造机遇检测之前每次提拔到晚年月的均匀巨细是否大于晚年月的剩余空间巨细,假如大于,则举办一次 Full GC,假如小于,则查察 HandlePromotionFailure 配置是否应承包管失败,假如应承,那只会举办一次 Minor GC,假如不应承,则改为举办一次 Full GC。
6)内存走漏和内存溢出
答:
观念:
- 内存溢出指的是内存不足用了;
- 内存走漏是指工具可达,可是没用了。即本该被 GC 接纳的工具并没有被接纳;
- 内存泄漏是导致内存溢出的缘故起因之一;内存泄漏蕴蓄起来将导致内存溢出。
内存走漏的缘故起因说明:
- 永生命周期的工具引用短生命周期的工具;
- 没有将无用工具置为 null。
小结:本末节涉及到 JVM 假造机,包罗对内存的打点等常识,相对较深。除了以上题目,口试官会继承问你一些较量深的题目,也许也是为了看看你的极限在那边吧。好比:内存调优、内存打点,是否碰着过内存走漏的现实案例、是否真正体谅过内存等。因为本人现实项目履历不敷,这些深条理题目并没有打仗过,列位有必要可以上网查阅。
(五)Java 8 相干常识点
关于 Java8 中新常识点,口试官会让你说说 Java8 你相识几多,下边首要叙述我所相识,而且在口试中答复的 Java8 新增常识点。
1)HashMap 的底层实现有变革:HashMap 是数组 + 链表 + 红黑树(JDK1.8 增进了红黑树部门)实现。
2)JVM 内存打点方面,由元空间取代了永世代。
区别:
- 元空间并不在假造机中,而是行使当地内存;
- 默认环境下,元空间的巨细仅受当地内存限定;
- 也可以通过-XX:MetaspaceSize 指定元空间巨细。
3)Lambda 表达式(也称为闭包),应承我们将函数当成参数转达给某个要领,可能把代码自己当做数据处理赏罚。
4)函数式接口:指的是只有一个函数的接口,java.lang.Runnable 和 java.util.concurrent.Callable 就是函数式接口的例子;java8 提供了一个非凡的注解 @Functionallnterface 来标明该接口是一个函数式接口。
5)引入一再注解:Java 8 中行使 @Repeatable 注解界说一再注解。
6)接口中可以实现要领 default 要领。
7) 注解的行使场景拓宽: 注解险些可以行使在任何元素上:局部变量、接口范例、超类和接话柄现类,乃至可以用在函数的非常界说上。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|