JVM中GC小对象配置
小對象配置
-XX:+UseTLAB
表示,使用TLAB
TLAB
Thread Local Allocation Buffer
線程本地分配緩存
一個線程專用的內(nèi)存分配區(qū)域,為了加速對象分配
每一個線程,都會產(chǎn)生一個TLAB,該線程獨享的工作區(qū)域
每一個線程,都會默認使用TLAB區(qū)域
TLAB用來避免多線程沖突問題,提高對象分配效率
內(nèi)存大小
TLAB空間一般不會太大
存放過程
如果,對象超過了eden區(qū)對象設(shè)置的大小
eden區(qū)放不下,會優(yōu)先放到TLAB區(qū)
如果,TLAB區(qū)根據(jù)設(shè)置的對象大小
TLAB區(qū)也放不下,會直接分配在堆上
程序分析
每次需要1K,總共需要5M內(nèi)存
測試
配置參數(shù)
-Xmx30M -Xms30M -XX:+UseSerialGC -XX:+PrintGCDetails -XX:PretenureSizeThreshold=1000 -XX:+UseTLAB使用TLAB區(qū)域
每次需要1K,大于1000,直接放到堆內(nèi)存
優(yōu)先放到TLAB區(qū)域,因此,堆占用空間為0
這5M數(shù)據(jù),都放在了TLAB區(qū)
運行
測試
配置信息
-Xmx30M -Xms30M -XX:+UseSerialGC -XX:+PrintGCDetails -XX:PretenureSizeThreshold=1000不配置使用TLAB
默認是使用TLAB區(qū)域
因此,還會放在TLAB區(qū)域,堆內(nèi)存使用為0
運行
測試
配置參數(shù)
-Xmx30M -Xms30M -XX:+UseSerialGC -XX:+PrintGCDetails -XX:PretenureSizeThreshold=1000 -XX:-UseTLAB減號,不使用TLAB區(qū)域
需要1K,大于1000
由于,沒有TLAB區(qū)域
這些對象會分配在堆上,為5M
運行
總結(jié)
以上是生活随笔為你收集整理的JVM中GC小对象配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM中GC大对象配置
- 下一篇: JVM中TLAB区