我无法找到一个能够以清晰的方式解释这个概念的综合资料来源。我的理解是,在eden中为线程分配了一些新的对象。一个竞争的线程最终会有一些连续的伊甸园。如果第一个线程在其TLAB中用完了空闲区域会发生什么?它会要求新的伊甸园吗?
答案 0 :(得分:32)
TLAB的想法是减少线程之间同步的需要。使用TLAB,这种需求减少了,因为任何线程都有一个可以使用的区域,并且期望它是使用该区域的唯一线程。假设TLAB可以容纳100个对象,则线程只需要在分配101对象时获取锁以声明更多内存。没有TLAB,每个对象都需要这个。缺点当然是你可能浪费空间。
大型对象通常在TLAB之外分配,因为它们无法降低同步内存分配的频率。有些对象甚至可能不适合TLAB。
您可以使用-XX:TLABSize
标志设置TLAB的大小,但通常我不建议您使用这些设置,除非您真的发现了可以解决的问题。