Java任务控制中的总TLAB大小与总对象大小

Java任务控制中的总TLAB大小与总对象大小,java,memory-management,Java,Memory Management,我正在研究用于内存消耗调查的Oracle Java任务控制。首先,我使用JDK 8示例中提供的飞行记录wldf.jfr。我对总TLAB大小和总对象大小的列感到困惑: 对于第一个线程,总对象大小为1.52MB,但总TLAB大小为809.91MB(不同大小)。这是怎么解释的?应用程序是使用 -Xms256m-Xmx512m-XX:PermSize=128m-XX:MaxPermSize=256m 到目前为止,我的理解是每个线程都有一个TLAB。一个TLAB可以失效,并且基于的值(除其他因素外)为线

我正在研究用于内存消耗调查的Oracle Java任务控制。首先,我使用JDK 8示例中提供的飞行记录wldf.jfr。我对总TLAB大小和总对象大小的列感到困惑:

对于第一个线程,总对象大小为1.52MB,但总TLAB大小为809.91MB(不同大小)。这是怎么解释的?应用程序是使用

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

到目前为止,我的理解是每个线程都有一个TLAB。一个TLAB可以失效,并且基于的值(除其他因素外)为线程分配一个新的TLAB

-XX:TLABWasteTargetPercent

退休的TLAB的数据仍保留在伊甸园中,他们的命运在下一次小型GC中决定。那么,TLAB列是指退休/分配的总数吗?这反过来应该表明,总TLAB大小是这些新TLAB分配的累积度量


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

在新TLAB中分配事件有点棘手, 它表示一个对象分配,导致为线程分配新的TLAB。(试探性地假设TLAB仅包含与第一个对象类型相同的对象) 该事件包含有关对象分配本身和TLAB的信息

“Total Object Size”列(默认情况下未启用)只是对导致新TLAB的各个对象的对象大小求和,因此这是一个非常奇怪的统计数据

在JDK9中包含的JMC6中,我相信我们已经删除了这个特殊的计算