Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MaxtenuringReshold-它到底是如何工作的?_Java_Garbage Collection - Fatal编程技术网

Java MaxtenuringReshold-它到底是如何工作的?

Java MaxtenuringReshold-它到底是如何工作的?,java,garbage-collection,Java,Garbage Collection,我们知道主内存域很少:年轻、终身(老一代)和永久 年轻领域分为伊甸园和幸存者(两个) OldGen是用来保存物品的 MaxTenuringReshold可防止对象过早地最终复制到OldGen空间。这很清楚,也可以理解 但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以及以何种方式处理这些对象?他们在哪里 正在将对象复制回幸存者空间以进行垃圾收集。。或者它是以其他方式发生的?Java堆中的每个对象都有一个标头,垃圾收集(GC)算法使用该

我们知道主内存域很少:年轻、终身(老一代)和永久

  • 年轻领域分为伊甸园和幸存者(两个)
  • OldGen是用来保存物品的
MaxTenuringReshold可防止对象过早地最终复制到OldGen空间。这很清楚,也可以理解

但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以及以何种方式处理这些对象?他们在哪里


正在将对象复制回幸存者空间以进行垃圾收集。。或者它是以其他方式发生的?

Java堆中的每个对象都有一个标头,垃圾收集(GC)算法使用该标头。年轻的空间收集器(负责对象升级)使用此标头中的一些位来跟踪幸存的对象集合数(32位JVM使用4位,64位可能更多)

在年轻空间收集期间,将复制每个对象。对象可以复制到一个生存空间(年轻GC之前为空的空间)或旧空间。对于要复制的每个对象,GC算法都会增加其年龄(保留的集合数),如果年龄高于当前寿命阈值,则会将其复制(升级)到旧空间。如果生存空间已满(溢出),对象也可以直接复制到旧空间

对象的旅程具有以下模式:

  • 伊甸园
  • 由于年轻GC,从伊甸园复制到生存空间
  • 由于年轻GC,从生存空间复制到(其他)生存空间(这种情况可能会发生几次)
  • 由于年轻GC(或完整GC),从生存(或可能的伊甸园)提升到旧空间
实际的寿命阈值由JVM动态调整,但MaxTenuringThreshold设置了上限

如果将MaxTenuringThreshold设置为0,则所有对象都将立即升级

我有一些关于java垃圾收集的信息,您可以在那里找到更多详细信息。

(免责声明:仅适用于HotSpot VM)

正如Alexey所说,实际使用的寿命阈值是由JVM动态确定的。设置它没有什么价值。对于大多数应用程序,默认值15将足够高,因为通常会有更多对象在集合中存活。 当许多对象在集合中幸存时,幸存者空间会直接溢出到旧空间。这被称为过早晋升,是一个问题的标志。然而,通过调整MaxTenuringReshold很少能解决这个问题

在这些情况下,有时可以使用SurvivorRatio来增加幸存者空间中的空间,从而允许使用期限实际起作用。 然而,扩大年轻一代通常是唯一的好选择(从配置角度)。 如果您是从编码的角度来看的,那么您应该避免过多的对象分配,以使tenuring按设计工作

要准确回答您的问题:
当一个对象达到其JVM确定的期限阈值时,它被复制到旧的。在此之前,它将被复制到空的幸存者空间。已存活一段时间但在达到阈值之前被取消引用的对象将非常有效地从存活对象中清除。

您无法回答更改
maxtenuringreshold
将如何影响GC。如果我把它设为6呢?15? 区别是什么?是否在任何地方记录了
MaxTenuringThreshold
的最大(有效)值?您不应将该值设置超过15。裁判: