新生代的概念、分区,以及MinorGC的过程

参考答案

新生代是用来存放新生的对象,一般占据堆的 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—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧