进入年老区情况:
1.老对象进入老年区(一般是在新生代经历15次GC,也可以使用MaxTenuringThreshold)
2.大对象进入老年区(一次请求的对象,新生区没有这么大的空间,会将对象直接分配到老年区(前提是年老区有这么大的空间,如果没有报内存溢出错误)
TLAB
Thread local allocation buffer:线程本地分配缓存,一个线程专用的内存区域(占用eden区)
目的:避免多线程冲突,提高对象分配效率,TLAB启用时,java虚拟机会为每一个线程分配一个TLAB空间
参数:
-XX:TLABSize 设置TLAB大小
-XX:+UseTLAB 使用TLAB(默认为开启)
-XX:-UseTLAB 关闭TLAB
public class UseTLAB{
private static void alloc(){
byte[] b= new byte[2];
b[0]=1;
}
public static void main(String[] args) {
long s = System.currentTimeMillis();
for(int i=0;i<100000000;i++)
alloc();
long e = System.currentTimeMillis();
System.out.println(e-s);
}
}
/**
* java -XX:+UseTLAB 结果:9
* java -XX:-UseTLAB 结果:12
*/