不要相信我。我只是在重复我从不同来源拼凑而成的内容。 HotSpot JVM使用线程本地分配缓冲区(TLAB)。 TLAB是否可以同步。大多数情况下,TLAB不同步,因此线程可以很快分配。这些TLAB数量很多,以便 Activity 线程获得自己的TLAB。不太活跃的线程共享一个同步的TLAB。当线程耗尽其TLAB时,它将从池中获取另一个TLAB。当池中的TLAB用尽时,将触发或需要Young GC。

当池中的TLAB用尽时,仍然会有剩余空间的TLAB。这个“未使用的空间”加起来非常重要。可以看到此空间,因为在达到保留堆大小或最大堆大小之前触发了GC。因此,堆实际上减小了10-30%。至少这是我从查看堆使用情况图得出的猜测。

如何调整JVM以减少未使用的空间?

最佳答案

您可以使用命令行选项-XX:TLABSize调整该设置

但是,与大多数这些“深入而肮脏的”设置一样,更改这些设置时应格外小心,并密切监视更改的效果。

07-26 04:29