线程TLAB局部缓存区域(Thread Local Allocation Buffer)

  • Post author:
  • Post category:其他


TLAB(Thread Local Allocation Buffer)

1、堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的

2、Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer), 其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分配内存时会尽量的在TLAB上分配。在这种情况下JVM中分配对象内存的性能和C基本是一样高效的,但如果对象过大的话则仍然是直接使用堆空间分配

3、TLAB仅作用于新生代的Eden Space,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。

4、所有新创建的Object 都将会存储在新生代Yong Generation中。

如果Young Generation的数据在一次或多次GC后存活下来,那么将被转移到OldGeneration。

新的Object总是创建在Eden Space。

PS:虽然总体来说堆是线程共享的,但是在堆的年轻代中的Eden区可以分配给专属于线程的局部缓存区TLAB,也可以用来存放对象。相当于线程私有的对象。

作者:博客园-

假程序猿

地址:

https://www.cnblogs.com/straybirds/p/8529924.html