JVM ZeroTLAB 是什麼意思呢?

乾貨滿滿張雜湊發表於2021-02-12

ZeroTLAB 是 JVM 的一個布林型 Flag,意思是是否將新建立的 TLAB 內的所有位元組歸零。

預設:false

舉例-XX:+ZeroTLAB

當分配出來 TLAB 之後,根據 ZeroTLAB 配置,決定是否將每個位元組賦 0。在 TLAB 申請時,由於申請 TLAB 都發生在物件分配的時候,也就是這塊記憶體會立刻被使用,並修改賦值。操作記憶體,涉及到 CPU 快取行,如果是多核環境,還會涉及到 CPU 快取行 false sharing,為了優化,JVM 在這裡做了 Allocation Prefetch,簡單理解就是分配 TLAB 的時候,會盡量載入這塊記憶體到 CPU 快取,也就是在分配 TLAB 記憶體的時候,修改記憶體是最高效的

在建立物件的時候,本來也要對每個欄位賦初始值,大部分欄位初始值都是 0,並且,在 TLAB 返還到堆時,剩餘空間填充的也是 int[] 陣列,裡面都是 0。

所以,TLAB 剛分配出來的時候,賦 0 避免了後續再賦 0。也能利用好 Allocation prefetch 的機制適應 CPU 快取行

每日一刷,輕鬆提升技術,斬獲各種offer:

image

相關文章