JVM中的线程本地分配缓冲区TLAB是什么? - alidg


JVM在分配新对象时,将在专用于原始线程的TLAB(线程本地分配缓冲区)中分配该对象。由于每个线程只能写入自己的TLAB,因此不需要同步。TLAB默认情况下处于启用状态,但如果您疯了,可以随时使用-XX:-UseTLAB调整标志将其禁用。
Java线程本地分配缓冲区可以用《操作系统:原理与实践》一书中的一句话来解释:

  • 细分堆的好处是,多个线程可以同时分配对象,而不会互相干扰。此外,通过从同一存储器区域分配同一线程使用的对象,可以提高高速缓存命中率。―托马斯·安德森

为了了解分配策略对CPU缓存的影响,Opsian的首席执行官Sadiq Jaffer写了一篇文章:“ 为什么Java的TLAB非常重要,为什么写争用是多核环境中的性能杀手 ”。
作为对TLAB概念的介绍:

AlekseyShipilёv的文章更深入,他的“ JVM Anatomy Quark”系列中有两章专门介绍TLAB:

使用传入的带有虚拟线程的Project Loom,JVM是否会以相同的方式运行?会改变设计吗?