java - 新 TLAB 中的分配与 TLAB 之外的分配

标签 java performance garbage-collection jvm jmc

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 提供的答案 :)

关于java - 新 TLAB 中的分配与 TLAB 之外的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26351243/

相关文章:

java - Guice:如何动态更新模块中的定义而不丢失预先存在的单例

java - 如何在 GUI Java 中制作功能区(如 Office 2013 功能区)?

c# - 我如何才能发现最终用户的用户系统性能设置?

java - G1 old generation committed 内存突然增加,Eden size 减少

java - 内存泄漏: Thread objects not picked up by GC or is it a classloading issue?

javascript - 从钛内存中删除 var 对象

java - Dropwizard 和 hive-jdbc 之间的不兼容

java - Springboot @PropertySource 与 --spring.config.location=/etc/foo/

mysql - 慢查询会造成损害吗?

c# - 如何在 C# 和 C++ 中测量耗时