我试图了解Java堆术语中的年轻,老年和永久一代的概念,更具体地说是三代之间的交互。 我的问题是:
这似乎是一种常见的误解。在Oracle的JVM中,永久生成不是堆的一部分。它是用于类定义和相关数据的单独空间。在Java 6和更早版本中,实习生字符串也存储在永久代中。在Java 7中,插入的字符串存储在主对象堆中。
这是永久世代的好帖子。
我喜欢Oracle 关于JConsole的指南中对每个空间的描述:
对于HotSpot Java VM,用于串行垃圾回收的内存池如下。
Java使用分代垃圾回收。这意味着,如果你有一个对象foo(它是某个类的实例),则该对象幸存的垃圾收集事件越多(如果仍然有对其的引用),则它得到的推广就越多。它始于年轻一代(本身被划分为多个空间-伊甸园和幸存者),如果生存了足够长的时间,最终将进入终身一代。