参考答案
新生代是用来存放新生的对象,一般占据堆的 1/3 空间。
由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。
一、新生代分为3个区: Eden区、 ServivorFrom、 ServivorTo
1. Eden 区
Java 新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当 Eden 区内存不够的时候就会触发 MinorGC,对新生代区进行一次垃圾回收。
2. ServivorFrom
上一次 GC 的幸存者,作为这一次 GC 的被扫描者。
3. ServivorTo
保留了一次 MinorGC 过程中的幸存者。
二、MinorGC 的过程(复制->清空->互换)
MinorGC 采用复制算法。
1. eden、 servicorFrom 复制到 ServicorTo,年龄+1
首先,将Eden 和 ServivorFrom 区域中存活的对象,复制到 ServicorTo 区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果 ServicorTo 不够位置了就放到老年区)。
2. 清空 eden、 servicorFrom
清空 Eden 和 ServicorFrom 中的对象。
3. ServicorTo 和 ServicorFrom 互换
最后, ServicorTo 和 ServicorFrom 互换,原 ServicorTo 成为下一次 GC 时的 ServicorFrom区。
以上,是JVM面试题【方法区/永久代(线程共享)】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—