TLAB是线程本地分配缓冲区。在HotSpot中分配对象的常规方法是在TLAB中。由于分配缓冲区是线程本地的,因此可以在不与其他线程同步的情况下完成TLAB分配,因此仅在获取新的TLAB时才需要同步。
因此,理想的情况是尽可能在TLAB中完成分配。
一些对象将被分配到TLAB之外,例如大对象。只要在TLAB之外的分配与新TLAB中的分配的百分比较低,就不必担心。
在执行每个线程时,会分别动态调整TLAB的大小。因此,如果线程分配过多,则它从堆中获得的新TLAB的大小将增加。如果需要,可以尝试设置标志
-XX:MinTLABSize以设置最小TLAB大小,例如
-XX:MinTLABSize=4k
我的同事David Lindholm提供的答案:)



