gpt4 book ai didi

java - 如何读取 +PrintTenuringDistribution 的输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:21 25 4
gpt4 key购买 nike

我使用 -XX:+PrintTenuringDistribution 启用了 gc 日志。但我对下面的终身分配感到很困惑。

根据我的阅读,第一次 gc 中的年龄 1(从 1 次 GC 幸存下来)有 10532656 个字节。在第二次 gc 中,年龄 2 中有 9178824 字节(从 2 次 GC 中幸存下来)。这很好,因为一些对象在第一次和第二次 GC 之间死亡。

但是在第二次 GC 中,16101552 字节在年龄 3 中,而在第一次 GC 中只有 14082976 字节在年龄 2 中。我不明白为什么这个数字在增加。年龄n的所有字节不应该都来自上一次GC的年龄n-1吗?还是我误解了这些数字?

谢谢。

2013-10-19T19:46:30.244+0800: 169797.045: [GC2013-10-19T19:46:30.244+0800: 169797.045: [ParNew
Desired survivor size 87359488 bytes, new threshold 4 (max 4)
- age 1: 10532656 bytes, 10532656 total
- age 2: 14082976 bytes, 24615632 total
- age 3: 15155296 bytes, 39770928 total
- age 4: 13938272 bytes, 53709200 total
: 758515K->76697K(853376K), 0.0748620 secs] 4693076K->4021899K(6120832K), 0.0756370 secs] [Times: user=0.42 sys=0.00, real=0.07 secs]
2013-10-19T19:47:10.909+0800: 169837.710: [GC2013-10-19T19:47:10.909+0800: 169837.711: [ParNew
Desired survivor size 87359488 bytes, new threshold 4 (max 4)
- age 1: 9167144 bytes, 9167144 total
- age 2: 9178824 bytes, 18345968 total
- age 3: 16101552 bytes, 34447520 total
- age 4: 21369776 bytes, 55817296 total
: 759449K->63442K(853376K), 0.0776450 secs] 4704651K->4020310K(6120832K), 0.0783500 secs] [Times: user=0.43 sys=0.00, real=0.07 secs]

编辑:

这已被确认为 jvm 本身的错误,因为在声明对象时存在竞争条件。

详细讨论可以在这里找到:

http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2013-October/001635.html

最佳答案

关于 OpenJDK 邮件列表 (hotspot-gc-use@openjdk.java.net) 的讨论表明,这种异常的使用期限分布报告是每个年龄计数器未更新线程之间的竞争条件的结果。

漏洞 JDK-8027363已满。

错误摘录:

Here's the issue: In the code for copying a target object into the survivor space or into old gen, several threads may race to claim an object. In the case where the object's age is under the tenuring threshold, or if the older generation is not CMS, we will first copy the object then claim the object by swapping in the forwarding pointer to the copy. The other copies are discarded and the winning thread continues. The problem is that the age table is incremented by all of the threads racing to do the copying. The fix is that only the winner of the race should increment the age table to avoid multiple increments.

关于java - 如何读取 +PrintTenuringDistribution 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19558384/

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