我在Oracle网站上找到了“Java Garbage Collection Basic”教程:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
包括以下内容:
世代垃圾收集过程
现在您已经了解了为什么将堆分成不同的世代,现在该看看这些空间之间如何精确地相互作用了。接下来的图片介绍了JVM中的对象分配和老化过程。
首先,将任何新对象分配到eden空间。 两个幸存者空间开始都是空的。
但是在此图像中,“来自”幸存者空间不是空的,它有两个对象,一个是1岁,另一个是3岁。这是错误吗?
最佳答案
不,这不是错误。
该图像只是,而不是,该图像显示了第一个次要垃圾回收之前的情况。链接中的项目2和3指出:
因此,在次要垃圾收集期间,伊甸园空间中的引用对象移至幸存者空间,并且每个后续的次要GC都会增加幸存对象的年龄。因此,根据图像,在分配新对象之前,必须至少有3个次要GC。