我找不到一个全面的资源来清晰地解释这个概念。我的理解是,线程在eden区中被分配一些内存块以分配新对象。竞争的线程最终会在eden区中找到一些相邻的内存块。如果第一个线程在其TLAB中用完了所有的空闲区域会发生什么?它会请求一个新的eden区块吗?
TLAB的想法是减少线程之间同步的需求。使用TLAB,可以减少这种需求,因为任何线程都有一个可以使用的区域,并期望它是唯一使用该区域的线程。假设一个TLAB可以容纳100个对象,当分配第101个对象时,线程只需要获取锁来声明更多内存即可。没有TLAB,对于每个对象都需要这样做。缺点当然是可能会浪费空间。大型对象通常在TLAB之外分配,因为它们取消了减少同步内存分配频率的优势。有些对象甚至无法适应TLAB内。您可以使用“-XX:TLABSize”标志设置TLAB的大小,但通常我不建议您调整这些设置,除非您真正发现可以通过此解决问题。