JVM ZeroTLAB 是什麼意思呢?

ZeroTLAB 是 JVM 的一個布爾型 Flag,意思是是否將新建立的 TLAB 內的全部字節歸零。數組

默認:false緩存

舉例-XX:+ZeroTLABide

當分配出來 TLAB 以後,根據 ZeroTLAB 配置,決定是否將每一個字節賦 0。在 TLAB 申請時,因爲申請 TLAB 都發生在對象分配的時候,也就是這塊內存會馬上被使用,並修改賦值。操做內存,涉及到 CPU 緩存行,若是是多核環境,還會涉及到 CPU 緩存行 false sharing,爲了優化,JVM 在這裏作了 Allocation Prefetch,簡單理解就是分配 TLAB 的時候,會盡可能加載這塊內存到 CPU 緩存,也就是在分配 TLAB 內存的時候,修改內存是最高效的fetch

在建立對象的時候,原本也要對每一個字段賦初始值,大部分字段初始值都是 0,而且,在 TLAB 返還到堆時,剩餘空間填充的也是 int[] 數組,裏面都是 0。優化

因此,TLAB 剛分配出來的時候,賦 0 避免了後續再賦 0。也能利用好 Allocation prefetch 的機制適應 CPU 緩存行code

每日一刷,輕鬆提高技術,斬獲各類offer:對象

image

相關文章
相關標籤/搜索