Nat*_*han 5 java optimization garbage-collection heap-memory
不要相信我的话。我只是重复我从不同来源拼凑出来的东西。HotSpot JVM 使用线程本地分配缓冲区 (TLAB)。TLAB 可以同步也可以不同步。大多数时间 TLAB 不同步,因此线程可以非常快速地分配。有大量的这些 TLAB,以便活动线程获得它们自己的 TLAB。不太活跃的线程共享一个同步的 TLAB。当一个线程耗尽其 TLAB 时,它会从池中获取另一个 TLAB。当池用完 TLAB 时,就会触发或需要 Young GC。
当池用完 TLAB 时,仍然会有剩余空间的 TLAB。这个“未使用的空间”加起来很重要。可以看到这个空间是因为在达到保留堆大小或最大堆大小之前触发了 GC。因此,堆实际上小了 10-30%。至少这是我通过查看堆使用图得出的猜测。
如何调整 JVM 以减少未使用的空间?