主题
面试速答(先看这里)
**一句话结论:**所以, 新生代选择了复制算法进行垃圾回收 ,但是标记复制算法存在一个缺点就是会浪费空间,新生代为了解决这个问题,把区域进一步细分成一个Eden区和两个Survivor区,同时工作的只有一个Eden区+一个Survivor区,这样,另外一个Survivor主要用来复制就可以了。
60秒标准回答:
三种垃圾回收算法,复制、标记清除、标记整理中,比较适合新生代的算法是标记复制算法
因为对于新生代来说,一般来说GC的次数是要比老年代高很多的,所以需要一个效率更高的算法,而且最好不要有碎片,因为很多对象都是需要先在新生代分配空间的,如果碎片太多的话,那么就会导致很多对象无法正常分配了
所以, 新生代选择了复制算法进行垃圾回收 ,但是标记复制算法存在一个缺点就是会浪费空间,新生代为了解决这个问题,把区域进一步细分成一个Eden区和两个Survivor区,同时工作的只有一个Eden区+一个Survivor区,这样,另外一个Survivor主要用来复制就可以了。只需要动态的调整Eden区和Survivor区的比例就可以降低空间浪费的问题
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**三种垃圾回收算法,复制、标记清除、标记整理中,比较适合新生代的算法是标记复制算法。
- **要点2:**因为对于新生代来说,一般来说GC的次数是要比老年代高很多的,所以需要一个效率更高的算法,而且最好不要有碎片,因为很多对象都是需要先在新生代分配空间的,如果碎片太多的话,那么就会导致很多对象无法正常分配了。
- **要点3:**对于老年代来说,通常会采用标记整理算法 ,虽然效率低了一点,但是可以减少空间的浪费并且不会有空间碎片等问题。
**记忆锚点:**Survivor → Eden → 标记清除算法 → 对于老年代来说通常会采用标记整理算法 → 新生代和老年代的GC算法 → 要一个效率更高的算法
易错提醒:
- 因为对于新生代来说,一般来说GC的次数是要比老年代高很多的,所以需要一个效率更高的算法,而且最好不要有碎片,因为很多对象都是需要先在新生代分配空间的,如果碎片太多的话,那么就会导致很多对象无法正常分配了。
追问准备:
- 围绕「Survivor」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「Eden」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「标记清除算法」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
三种垃圾回收算法,复制、标记清除、标记整理中,比较适合新生代的算法是标记复制算法。
因为对于新生代来说,一般来说GC的次数是要比老年代高很多的,所以需要一个效率更高的算法,而且最好不要有碎片,因为很多对象都是需要先在新生代分配空间的,如果碎片太多的话,那么就会导致很多对象无法正常分配了。
所以,新生代选择了复制算法进行垃圾回收,但是标记复制算法存在一个缺点就是会浪费空间,新生代为了解决这个问题,把区域进一步细分成一个Eden区和两个Survivor区,同时工作的只有一个Eden区+一个Survivor区,这样,另外一个Survivor主要用来复制就可以了。只需要动态的调整Eden区和Survivor区的比例就可以降低空间浪费的问题。
对于老年代来说,通常会采用标记整理算法,虽然效率低了一点,但是可以减少空间的浪费并且不会有空间碎片等问题。在有些回收器上面,如CMS,为了降低STW的时长,也会采用标记清除算法。