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

Java 新TLAB中的分配与TLAB之外的分配,java,performance,garbage-collection,jvm,jmc,Java,Performance,Garbage Collection,Jvm,Jmc,JDK中的Java任务控制工具提供了有关新TLAB中的对象分配和TLAB之外的分配的统计信息。(在内存/分配下)。这些统计数据的意义是什么,对应用程序的性能有什么好处?如果某些对象是在TLAB之外分配的,我应该担心吗?如果是,我该怎么办?TLAB是线程本地分配缓冲区。在热点中分配对象的正常方式是在TLAB中。TLAB分配可以在不与其他线程同步的情况下完成,因为分配缓冲区是线程本地的,所以只有在获取新TLAB时才需要同步 因此,理想的情况是尽可能多的分配在TLAB中完成 一些对象将在TLAB外部分

JDK中的Java任务控制工具提供了有关新TLAB中的对象分配和TLAB之外的分配的统计信息。(在内存/分配下)。这些统计数据的意义是什么,对应用程序的性能有什么好处?如果某些对象是在TLAB之外分配的,我应该担心吗?如果是,我该怎么办?

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

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

一些对象将在TLAB外部分配,例如大型对象。只要TLAB之外的分配与新TLAB中的分配的百分比较低,就不必担心这一点

TLAB在每个线程执行期间分别动态调整大小。因此,如果一个线程进行了大量分配,那么它从堆中获得的新TLAB的大小将增加。例如,如果需要,可以尝试设置标志
-XX:MinTLABSize
,以设置最小TLAB大小
-XX:MinTLABSize=4k


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

关于TLAB的好信息!谢谢