在java里面我们知道垃圾回收包含:垃圾回收器,垃圾回收算法,垃圾回收阶段。这篇我们介绍下jvm整个垃圾回收的过程。
1)首先分为年轻代和老年代
2)首先,将任何新对象分配给 eden 空间。两个 survivor 空间都是空的。
3)当 eden 空间填满时,会触发轻微的垃圾收集。
4)引用的对象被移动到第一个 survivor 空间。清除 eden 空间时,将删除未引用的对象。
5)在下一次Minor GC中,Eden区也会做同样的操作。删除未被引用的对象,并将被引用的对象移动到Survivor区。然而,这里,他们被移动到了第二个Survivor区(S1)。
6)此外,第一个Survivor区(S0)中,在上一次Minor GC幸存的对象,会增加年龄,并被移动到S1中。待所有幸存对象都被移动到S1后,S0和Eden区都会被清空。注意,Survivor区中有了不同年龄的对象。
7)在下一次Minor GC中,会重复同样的操作。不过,这一次Survivor区会交换。被引用的对象移动到S0,。幸存的对象增加年龄。Eden区和S1被清空。
8)在较小的GC之后,当老化的物体达到一定的年龄阈值(在该示例中为8)时,它们从年轻一代晋升到老一代。
9)随着较小的GC持续发生,物体将继续被推广到老一代空间。
10)所以这几乎涵盖了年轻一代的整个过程。最终,将主要对老一代进行GC,清理并最终压缩该空间。
以上10个步骤按顺序模式阐述了jvm垃圾回收的整个过程。大家可以多看看,多思考。
还没有评论,来说两句吧...