47

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

4

1 回答 1

83

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

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

一些对象将在 TLAB 之外分配,例如大对象。只要 TLAB 之外的分配与新 TLAB 中的分配的百分比较低,就无需担心。

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

我的同事大卫林德霍尔姆提供的答案:)

于 2014-10-14T10:33:26.360 回答