我试着去理解什么概念 年轻的, 常驻代 在Java堆的术语,更具体地之间的相互作用的三代。

我的问题是:

  • 什么是年轻的一代?
  • 什么是老一代?
  • 什么是永生?
  • 怎么了三代互动的/相互关联的?
有帮助吗?

解决方案

这似乎是一个常见的误解。在Oracle JVM,常驻代部分不是堆。它是一个独立的空间为类定义和相关的数据。在Java6和早些时候,拘留串也存在常驻代。在Java7,拘留串存在的主要对象堆。

这里是一个很好的岗位上 常驻代.

我喜欢这说明,每个空间Oracle 指南JConsole:

对于热点Java VM,存储器 游泳池串垃圾收集 如下。

  • 伊甸园空间(堆):游泳池来自其存储是最初分配 对于大多数对象。
  • 幸存者空间(堆):池中含有对象都活了下来 垃圾收集的伊甸园 空间。
  • 终身生(堆):池中含有对象的存在了 对于一些时间在幸存的空间。
  • 常驻代(非堆):池中含有所有的反光 数据虚拟机本身, 例如类和方法的对象。与 Java Vm使用类数据共享, 这一代人分成 只读和阅读写的领域。
  • 代码缓存(非堆):热点Java VM还包括一个代码缓存, 含有存储器是用于 汇编和存储的司机 代码。

Java使用代垃圾收集。这意味着,如果你有一个目foo(其中一个实例是一些类),更多的垃圾收集活动,它的生存(如果仍然引用),进一步得到促进。它开始在年轻一代(其本身就是分为多个空格-伊甸园和幸存者),并将最终结束在永久生如果它幸存下来足够长的时间。

其他提示

堆分为年轻人和老一代如下:

年轻一代 :它是地方,那里居住的短期和分为两个空间:

  • 伊甸园空间 :当对象的创建使用的新的关键词分配的内存 在这个空间。
  • 幸存的空间 :这是游泳池,其中包含的对象而已 幸存下来后java垃圾收集从伊甸园的空间。

老一代 :这个游泳池基本上包含永久的和虚拟的 (保留)空间,并将保持这些对象,其中幸存下来 垃圾收集之后从年轻一代。

  • 永久空间: 这种存储池中包含的对象,其中幸存下来后,多个垃圾收集手段的对象后幸存下来的垃圾收集来自幸存者的空间。

常驻代: 这种存储池的名称,也说含有永久类的元数据和描述信息,以便永久代空间始终保留的类别,那些是联系在一起的类例如静态的成员。

Java8更新: 永久代 替换 元空间 这是非常相似。
主要区别是,元空间的重大小的动态,即,它可以扩大在运行时间。
Java元空间的空间:无限的(默认)

代码缓存 (虚拟或保留):如果您使用的热点Java VM这包括代码的高速缓冲区,含有存储器将被用于汇编和储存母代码。

enter image description here

礼貌

什么是年轻的一代?

年轻一代 是所有新的对象是分配和老年人。当年轻生成填满,这将导致一个小垃圾收集。一个年轻一代充满死亡的对象是收集速度非常快。一些幸存下来的对象是老年和最终移至古代。

什么是老一代?

老一代 是用来储存只要尚存的对象。通常,一个阈值设定为年轻一代对象和当年龄得到满足,目的被移动到古代。最终老一代需要收集。这一事件是称为 主要垃圾收集

什么是永生?

常驻代 包含的元数据需要通过JVM来描述类和方法中使用的应用程序。常驻代居住的JVM在运行时根据课程中使用通过应用程序。

永久代已经替换元空间,因为Java8释放。

PermSize&MaxPermSize 参数将会被忽略,现在

怎么了三代互动的/相互关联的?

enter image description here

图像源&oracle technetwork教程的文章: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

"一般垃圾收集过程"在上文解释了它们之间的相互作用与众多的图表。

看看摘要图:

enter image description here

Java虚拟机组成三个代:一个年轻的一代,一个古老的生成,以及一个永久性的产生。大多数对象是最初分配中的年轻一代。老一代中包含的对象,有一些幸存下来的年轻一代的集合,以及一些大的对象,可能直接分配在老一代。常驻代拥有的对象JVM认为方便有垃圾收集管理,例如目的描述类和方法,以及课程和方法本身。

存在SunHotSpot JVM分为三代:年轻一代,古代和常驻代。

  • 年轻一代:新创建的对象是分配给年轻。
  • 老一代:如果新对象的要求对于一大堆空间,它会直接分配到老。还对象,其中幸存下来的几个GC周期得到晋升到古代。电子长期生活的对象的房子在旧。
  • 常驻代:常驻代拥有的对象JVM认为方便有垃圾收集管理,例如目的描述类和方法,以及课程和方法本身。

供参考:常驻代不被认为是一部分Java堆。

怎么了三代互动的/相互关联的? 对象(除了大部分)是第一分配给年轻一代。如果一个物体仍然活着之后,x没有。的垃圾收集周期它会促进了旧/终身。因此,我们可以说,青年代中包含短暂的对象,而旧艮包含的对象具有很长的寿命。常驻代不与其他两个世代。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top