1、堆區是線程共享的,任何線程都可以訪問到堆區中的共享數據。
2、由于對象實例的創建在 JVM 中非常頻繁,因此在并發環境下從堆區中劃分內存空間是線程不安全的。
3、為避免多個線程操作同一地址,需要使用加鎖等機制,進而影響分配速度。
盡管不是所有的對象實例都能夠在 TLAB 中成功分配內存,但 JVM 確實是將 TLAB 作為內存分配的首選。
在程序中,可以通過 -XX:UseTLAB 設置是否開啟 TLAB 空間。
默認情況下,TLAB 空間的內存非常小,僅占有整個 Eden 空間的 1%,我們可以通過 -XX:TLABWasteTargetPercent 設置 TLAB 空間所占用 Eden 空間的百分比大小。
一旦對象在 TLAB 空間分配內存失敗時,JVM 就會嘗試著通過使用加鎖機制確保數據操作的原子性,從而直接在 Eden 空間中分配內存。