我试图了解Java堆术语中的年轻,老年和永久一代的概念,更具体地说是三代之间的交互。

我的问题是:

  • 什么是年轻一代?
  • 什么是老一辈?
  • 什么是永久代?
  • 这三代人之间是如何相互作用/相互联系的?
  • 最佳答案

    这似乎是一种常见的误解。在Oracle的JVM中,永久生成不是堆的一部分。它是用于类定义和相关数据的单独空间。在Java 6和更早版本中,实习生字符串也存储在永久代中。在Java 7中,插入的字符串存储在主对象堆中。

    这是permanent generation上的好帖子。

    我喜欢Oracle的guide on JConsole中每个空间的描述:



    Java使用分代垃圾回收。这意味着,如果您有一个对象foo(它是某个类的实例),则该对象幸存的垃圾收集事件越多(如果仍然有对其的引用),则它得到的推广就越多。它始于年轻一代(本身被划分为多个空间-伊甸园和幸存者),如果生存了足够长的时间,最终将进入终身一代。

    10-08 00:05