gpt4 book ai didi

java - G1 GC什么时候直接分配old generation的对象

转载 作者:行者123 更新时间:2023-12-04 10:39:31 26 4
gpt4 key购买 nike

在我的gc日志中,有很多对象被分配给老年代(ALLOC(Old)日志),当前阈值为15,我的对象年龄只有1,即这些对象不会被提升到老年代,我猜有在 G1 GC 中将对象直接分配给老年代的任何条件?提前致谢!

GC 日志摘录:

grep "ALLOC(Old)" gc.log | wc -l

387

grep "thres" gc.log

Desired survivor size 1207959552 bytes, new threshold 15 (max 15)

Desired survivor size 1207959552 bytes, new threshold 15 (max 15)

- age 1: 37707272 bytes, 37707272 total

JDK 版本:
  • openjdk 版本“1.8.0_222”
  • OpenJDK 运行时环境(构建 1.8.0_222-b10)
  • OpenJDK 64 位服务器 VM(构建 25.222-b10,混合模式)

  • *********2020/01/31 更新****************

    它不是巨大的对象,gc log会以另一种方式显示巨大的对象分配,请引用以下gc log摘录,谢谢!
    >> grep "StartsH" gc.log | wc -l

    51

    >> grep "ContinuesH" gc.log | wc -l

    324

    >> grep "ALLOC(Old)" gc.log | wc -l

    528

    引用: https://www.redhat.com/en/blog/collecting-and-reading-g1-garbage-collector-logs-part-2

    最佳答案

    当分配了一个大对象(来自单个区域的 50% 或更多)时,就会发生这种情况。甚至 source code has a comment saying that .

    请记住,数组也是对象,因此当您分配大量原语时,您可能属于这一类。话虽如此,您有一个最新的 JVM 版本,其中这些非常大的对象可以作为年轻集合的一部分进行回收。

    编辑
    ALLOC(OLD)并不意味着你的应用程序已经开始在老年代分配对象。这只是意味着在这个 GC 周期中开始使用这个特定区域。 here is the method declarationhere is a usage of it , 在一个名为 G1CollectedHeap::new_gc_alloc_region 的方法中- 一个非常合适的名字 IMO。

    关于java - G1 GC什么时候直接分配old generation的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997454/

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