線程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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM