gpt4 book ai didi

java - MaxTenuringThreshold - 它究竟是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 21:04:52 35 4
gpt4 key购买 nike

我们知道主要内存域很少:Young、Tenured(Old gen)和 PermGen。

  • Young域分为Eden和Survivor(有两个)。
  • OldGen 用于幸存的对象。

MaxTenuringThreshold 防止对象过早地最终复制到 OldGen 空间。它非常清晰易懂。

但是它是如何工作的呢?垃圾收集器如何处理这些仍然存活到 MaxTenuringThreshold 的对象以及以什么方式?它们位于哪里?

对象被复制回幸存者空间进行垃圾收集.. 还是以其他方式发生?

最佳答案

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

在年轻空间收集期间,每个对象都被复制。 Object 可以复制到生存空间之一(在年轻 GC 之前为空的空间)或旧空间。对于每个被复制的对象,GC 算法会增加它的年龄(存活的集合数),如果年龄高于当前的tenuring threshold,它将被复制(提升)到旧空间。如果生存空间已满(溢出),对象也可以直接复制到旧空间。

Object的旅程有以下模式:

  • 在伊甸园分配
  • 由于年轻的 GC,从伊甸园复制到生存空间
  • 由于年轻的 GC,从生存空间复制到(其他)生存空间(这可能会发生几次)
  • 由于年轻 GC(或完全 GC)而从生存空间(或可能的伊甸园)提升到旧空间

实际的tenuring threshold由JVM动态调整,但MaxTenuringThreshold设置了一个上限。

如果设置 MaxTenuringThreshold=0,所有对象都会立即提升。

我有 few articles关于java垃圾回收,你可以找到更多细节。

关于java - MaxTenuringThreshold - 它究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543468/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com