JVM-垃圾收集器-回收过程

JDK1.8之前,JVM中堆空间可以分为新生代、老年代和永久代(1.8后永久代改为元空间,元空间不再使用堆而是使用本地内存)。
而新生代又分为一个Eden space 和两个survivor space。

1.首先,任何新对象都分配到 eden 空间。两个幸存者空间开始时都是空的。

JVM-垃圾收集器-回收过程_第1张图片

2.当 eden 空间填满时,将触发一个Minor GC(年轻代的垃圾回收)

JVM-垃圾收集器-回收过程_第2张图片

3.引用的对象将移动到第一个幸存者空间。清除 eden 空间时,将删除未引用的对象。

JVM-垃圾收集器-回收过程_第3张图片

4.在下一个Minor GC中,eden空间也会发生同样的事情。未引用的对象将被删除,
引用的对象将移动到survivor空间。但是,在这种情况下,它们被移动到第二个
survivor空间(S1)。此外,来自第一个survivor空间(S0)上最后一个次要
GC的对象的年龄递增并移动到S1。一旦所有幸存的物体都被移动到S1,S0和eden
都会被清除。请注意,我们现在在survivor 空间中有不同年龄的对象。

JVM-垃圾收集器-回收过程_第4张图片

5.在下一个Minor GC 中,将重复相同的过程。然而,这一次survivor 空间切换了。
引用的对象将移动到 S0。幸存的对象已过期(未引用)。eden和S1被清除。

JVM-垃圾收集器-回收过程_第5张图片

6.重复前面的过程,在Minor GC 之后,当老化对象达到某个年龄阈值
(在本例中为 8)时,它们将从新生代提升到老年代中。

JVM-垃圾收集器-回收过程_第6张图片

7.随着Minor GC的不断发生,对象将继续被提升到老年代空间。

JVM-垃圾收集器-回收过程_第7张图片

8.因此,这几乎涵盖了新生代的整个过程。最终,将在老年代上进行Full GC,
以清理和压缩该空间。

JVM-垃圾收集器-回收过程_第8张图片

你可能感兴趣的:(Java基础,java,开发语言)