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