JDK中的Java Mission Control工具提供有关新TLAB中的对象分配和TLAB外部分配的统计信息。 (它在Memory / Allocations下)。这些统计数据有什么意义,哪些对应用程序的性能有好处?如果在TLAB之外分配了一些对象,我是否应该担心?如果是,我该怎么办呢?
答案 0 :(得分:75)
TLAB是线程本地分配缓冲区。在HotSpot中分配对象的正常方式是在TLAB中。 TLAB分配可以在不与其他线程同步的情况下完成,因为分配缓冲区是线程本地,只有在获取新的TLAB时才需要同步。
因此,理想的情况是尽可能多地在TLAB中完成分配。
某些对象将在TLAB外部分配,例如大型对象。只要TLAB之外的分配百分比与新TLAB中的分配比例较低,就没什么可担心的了。
在每个线程的执行过程中,TLAB会动态调整大小。因此,如果一个线程分配很多,它从堆中获取的新TLAB的大小将会增加。例如,如果需要,可以尝试设置标志-XX:MinTLABSize
以设置最小TLAB大小
-XX:MinTLABSize=4k
我的同事David Lindholm提供的答案:)