我对Heap,Young,Tenured和Perm一代感到困惑。

谁能解释一下?

最佳答案

Java垃圾收集器称为分代垃圾收集器。应用程序中的对象的生存时间长短不一,具体取决于它们的创建位置和使用方式。此处的关键见解是,针对短期和长期对象使用不同的垃圾回收策略,可以针对每种情况专门优化GC。

松散地说,当对象“生存”在年轻一代中重复进行垃圾回收时,它们将迁移到终身代。永久生成是一种特殊情况,它包含JVM所需的对象,这些对象不一定在程序中表示,例如表示类和方法的对象。

由于“年轻一代”通常会包含很多垃圾,因此已对其进行了优化,可以一次清除很多未使用的对象。由于Tenured Generation包含生命周期更长的对象,因此已针对快速垃圾回收进行了优化,而不会浪费大量内存。

随着垃圾收集技术的改进,细节变得非常复杂,并且取决于您的JVM及其配置方式。如果需要确切了解正在发生的事情,则应该阅读正在使用的特定JVM的documentation

也就是说,有一个简单的历史安排,这在概念上仍然有用。从历史上看,年轻一代将是copy collector,而终身一代将是mark and sweep collector。副本收集器从根本上不需要为消除垃圾而付出CPU成本,大部分成本是维护 Activity 对象,而这种效率的代价是要占用更多的内存。标记和清除收集器为 Activity 和未使用的对象支付了一些CPU成本,但更有效地利用了内存。

关于java - 年轻,终身制和烫发一代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2070791/

10-10 10:08