新TLAB中的分配与TLAB外的分配

时间:2014-10-14 01:15:30

标签: java performance garbage-collection jvm jmc

JDK中的Java Mission Control工具提供有关新TLAB中的对象分配和TLAB外部分配的统计信息。 (它在Memory / Allocations下)。这些统计数据有什么意义,哪些对应用程序的性能有好处?如果在TLAB之外分配了一些对象,我是否应该担心?如果是,我该怎么办呢?

1 个答案:

答案 0 :(得分:75)

TLAB是线程本地分配缓冲区。在HotSpot中分配对象的正常方式是在TLAB中。 TLAB分配可以在不与其他线程同步的情况下完成,因为分配缓冲区是线程本地,只有在获取新的TLAB时才需要同步。

因此,理想的情况是尽可能多地在TLAB中完成分配。

某些对象将在TLAB外部分配,例如大型对象。只要TLAB之外的分配百分比与新TLAB中的分配比例较低,就没什么可担心的了。

在每个线程的执行过程中,TLAB会动态调整大小。因此,如果一个线程分配很多,它从堆中获取的新TLAB的大小将会增加。例如,如果需要,可以尝试设置标志-XX:MinTLABSize以设置最小TLAB大小 -XX:MinTLABSize=4k

我的同事David Lindholm提供的答案:)