什么是 TLAB(线程本地分配缓冲区)?

我找不到一个全面的来源来清楚地解释这个概念。我的理解是,线程在伊甸园中被赋予了一些内存块,在那里它分配了新的对象。一个相互竞争的线程最终会有一个有点连续的伊甸园块。如果第一个线程在其 TLAB 中的可用区域用完,会发生什么情况?它会要求一块新的伊甸园吗?


答案 1

TLAB的想法是减少线程之间同步的需要。使用 TLAB 可以减少这种需求,因为任何线程都有一个可以使用的区域,并期望它是唯一使用此区域的线程。假设一个 TLAB 可以容纳 100 个对象,那么线程在分配第 101 个对象时只需要获取一个锁来声明更多内存。如果没有 TLAB,每个对象都需要这样做。缺点当然是你可能会浪费空间。

大型对象通常分配在 TLAB 外部,因为它们没有降低同步内存分配频率的优势。某些对象甚至可能不适合 TLAB 内部。

您可以使用标志设置TLAB的大小,但通常我不建议您弄乱这些设置,除非您真的发现了可以解决的问题。-XX:TLABSize


答案 2