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,也可以用來存放對象。相當於線程私有的對象。