赞
踩
JDK1.8之前,JVM中堆空间可以分为新生代、老年代和永久代(1.8后永久代改为元空间,元空间不再使用堆而是使用本地内存)。
而新生代又分为一个Eden space 和两个survivor space。
1.首先,任何新对象都分配到 eden 空间。两个幸存者空间开始时都是空的。
2.当 eden 空间填满时,将触发一个Minor GC(年轻代的垃圾回收)。
3.引用的对象将移动到第一个幸存者空间。清除 eden 空间时,将删除未引用的对象。
4.在下一个Minor GC中,eden空间也会发生同样的事情。未引用的对象将被删除,
引用的对象将移动到survivor空间。但是,在这种情况下,它们被移动到第二个
survivor空间(S1)。此外,来自第一个survivor空间(S0)上最后一个次要
GC的对象的年龄递增并移动到S1。一旦所有幸存的物体都被移动到S1,S0和eden
都会被清除。请注意,我们现在在survivor 空间中有不同年龄的对象。
5.在下一个Minor GC 中,将重复相同的过程。然而,这一次survivor 空间切换了。
引用的对象将移动到 S0。幸存的对象已过期(未引用)。eden和S1被清除。
6.重复前面的过程,在Minor GC 之后,当老化对象达到某个年龄阈值
(在本例中为 8)时,它们将从新生代提升到老年代中。
7.随着Minor GC的不断发生,对象将继续被提升到老年代空间。
8.因此,这几乎涵盖了新生代的整个过程。最终,将在老年代上进行Full GC,
以清理和压缩该空间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。