主题
面试速答(先看这里)
**一句话结论:**首先,在垃圾收集器上面, Java 8 中默认的Parallel Scavenge GC+Parallel Old GC的 ,分别用来做新生代和老年代的垃圾回收。
60秒标准回答:
Java 8 和 Java 11都是LTS版本的JDK,所以会有人经常问他们之间的区别。特别是在GC上面的差别
首先,在垃圾收集器上面, Java 8 中默认的Parallel Scavenge GC+Parallel Old GC的 ,分别用来做新生代和老年代的垃圾回收。而在 Java 11中默认采用的是G1进行整堆回收的 (Java 9中就是默认的了)
另外, Java 11中还新增了一种垃圾收集器,那就是ZGC ,他可以在保证高吞吐量的同时保证最短的暂停时间
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**Java 8 和 Java 11都是LTS版本的JDK,所以会有人经常问他们之间的区别。
- **要点2:**另外, Java 11中还新增了一种垃圾收集器,那就是ZGC ,他可以在保证高吞吐量的同时保证最短的暂停时间。
- **要点3:**在知道了垃圾收集器上面的区别之后,就可以基于Parallel Scavenge GC+Parallel Old GC 和 G1的区别进一步说一下GC上面的区别了。
- **要点4:**在垃圾识别及回收上面, Java 8基于的是单纯地可达性分析,而Java 11中的G1采用的是三色标记法,可以大大降低STW的时长。
- **要点5:**另外, G1的内存划分是自适应的,它会根据堆的大小和使用情况来动态调整各个区域的大小和比例。
**记忆锚点:**Java → GC+Parallel → Parallel → Scavenge → Old → 新生代和老年代的垃圾回收
追问准备:
- 围绕「Java」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「GC+Parallel」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「Parallel」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
Java 8 和 Java 11都是LTS版本的JDK,所以会有人经常问他们之间的区别。特别是在GC上面的差别。
首先,在垃圾收集器上面,Java 8 中默认的Parallel Scavenge GC+Parallel Old GC的,分别用来做新生代和老年代的垃圾回收。而在Java 11中默认采用的是G1进行整堆回收的(Java 9中就是默认的了)。
另外,Java 11中还新增了一种垃圾收集器,那就是ZGC,他可以在保证高吞吐量的同时保证最短的暂停时间。
在知道了垃圾收集器上面的区别之后,就可以基于Parallel Scavenge GC+Parallel Old GC 和 G1的区别进一步说一下GC上面的区别了。
在垃圾识别及回收上面,Java 8基于的是单纯地可达性分析,而Java 11中的G1采用的是三色标记法,可以大大降低STW的时长。
另外,G1的内存划分是自适应的,它会根据堆的大小和使用情况来动态调整各个区域的大小和比例。而Parallel Scavenge GC+Parallel Old GC都是固定分配的策略。