【问题标题】:Total TLAB Size vs Total Object Size in Java Mission ControlJava Mission Control 中的总 TLAB 大小与总对象大小
【发布时间】:2018-01-30 18:37:09
【问题描述】:

我正在调查 Oracle Java Mission Control 以进行内存消耗调查。首先,我使用了 JDK 8 示例中提供的 Flight Recording wldf.jfr。我对 Total TLAB SizeTotal Object Size 的列感到困惑:

对于第一个线程,Total Object Size 为 1.52MB,但Total TLAB Size 为 809.91MB(大小不同)。这是如何解释的?该应用程序是使用

执行的

-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m

到目前为止,我的理解是每个线程都有一个 TLAB。 TLAB 可以退役,并根据(以及其他因素)的值为线程分配一个新的

-XX:TLABWasteTargetPercent

退役 TLAB 的数据留在 Eden 中,他们的命运由下一次 Minor GC 决定。那么 TLABs 列是否指的是退休/分配总数?这反过来应该表明TLAB 总大小是对这些新 TLAB 分配的累积度量。

我可以得出关于内存管理的任何结论吗?也许过多的 TLAB 分配可能会建议增加 TLAB 的大小?

【问题讨论】:

    标签: java memory-management


    【解决方案1】:

    'Allocation in new TLAB' 事件有点棘手, 它代表一个对象分配,这导致为线程分配一个新的 TLAB。 (启发式假设 TLAB 仅包含与第一个对象相同类型的对象) 该事件包含有关对象分配本身和 TLAB 的信息。

    “总对象大小”列(默认情况下未启用),只是将导致新 TLABS 的各个对象的对象大小相加,所以这确实是一个非常奇怪的统计数据。

    在 JMC 6 中,包含在 JDK 9 中,我相信我们已经删除了这个特定的计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2021-02-11
      • 2017-07-11
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多