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

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,也可以用来存放对象。相当于线程私有的对象。

 补充:JVM源码分析之线程局部缓存TLAB

 

posted @ 2018-03-08 17:54  假程序猿  阅读(4294)  评论(0编辑  收藏  举报