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

49

JDK中的Java Mission Control工具提供了关于在新的TLAB内和在TLAB外分配对象的统计信息(位于Memory/Allocations下)。这些统计信息有何意义,对应用程序的性能有何好处?如果某些对象在TLAB外分配,我是否应该担心?如果是,我该怎么做?


https://shipilev.net/jvm-anatomy-park/4-tlab-allocation/ - Vadzim
1个回答

85

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

因此,理想的情况是尽可能多地使用TLAB进行分配。

一些对象将在TLAB之外进行分配,例如大型对象。只要TLAB之外的分配比新TLAB中的分配低,这就不成问题。

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

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


TLABS的信息很棒!谢谢。 - Gaurav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接