JVM在分配新对象时,将在专用于原始线程的TLAB(线程本地分配缓冲区)中分配该对象。由于每个线程只能写入自己的TLAB,因此不需要同步。TLAB默认情况下处于启用状态,但如果您疯了,可以随时使用-XX:-UseTLAB调整标志将其禁用。
Java线程本地分配缓冲区可以用《操作系统:原理与实践》一书中的一句话来解释:
- 细分堆的好处是,多个线程可以同时分配对象,而不会互相干扰。此外,通过从同一存储器区域分配同一线程使用的对象,可以提高高速缓存命中率。―托马斯·安德森
作为对TLAB概念的介绍:
- “ JVM如何分配对象?”
- “ JVM中的线程本地分配缓冲区 ”,作者:Ali Dehghani