TLAB区配置
-XX:+UseTLAB
表示,是否使用TLAB
-XX:+TLABSize
表示,设置TLAB大小
-XX:TLABRefillWasteFraction
表示,设置进入TLAB空间,单个对象大小
是一个比例值,默认为64
如果,对象小于整个空间的1/64,则放在TLAB区
如果,对象大于整个空间的1/64,则放在堆区
-XX:+PrintTLAB
表示,查看TLAB信息
-XX:ResizeTLAB
表示,自动调整TLABRefillWasteFraction阈值
TLAB
Thread Local Allocation Buffer
线程本地分配缓存
一个线程专用的内存分配区域,为了加速对象分配
每一个线程,都会产生一个TLAB,该线程独享的工作区域
每一个线程,都会默认使用TLAB区域
TLAB用来避免多线程冲突问题,提高对象分配效率
内存大小
TLAB空间一般不会太大
eden区放不下,优先,分配到TLAB区
TLAB区也放不下,会直接分配在堆上
JVM
JVM中,创建对象的时候
TLAB区域,可以提高对象的创建效率
package com.bjsxt.base001;
public class Test07 {
public static void alloc() {
byte[] b = new byte[2];
}
public static void main(String[] args) {
// TLAB分配
// 参数:-XX:+UseTLAB -XX:TLABSize=102400 -XX:TLABRefillWasteFraction=100 -XX:-DoEscapeAnalysis
long start = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
alloc();
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
程序分析
每次创建一个空数组,调用1亿次
测试
配置参数
-XX:+UseTLAB -XX:TLABSize=102400 -XX:TLABRefillWasteFraction=100 -XX:-DoEscapeAnalysis
使用TLAB
大约时间为60多毫秒
运行
测试
配置参数
-XX:-UseTLAB -XX:TLABSize=102400 -XX:TLABRefillWasteFraction=100 -XX:-DoEscapeAnalysis
不使用TLAB
大约时间为150多毫秒
运行
说明
JVM中,创建对象的时候
TLAB区域可以提高对象的创建效率