对象年龄配置
-XX:MaxTenuring Threshold
配置新生代对象的最大年龄
当超过这个年龄,对象就会进入老年代
默认值为15
回收过程
对象,首次创建都会被放置在新生代的eden区
如果,没有GC,对象不会离开eden区
只要,对象的年龄达到了一定的大小
就会自动离开新生代,进入老年代
对象年龄
是由对象经历的GC次数决定的,新生代每次GC
只要,对象没有回收,年龄都会加1
package com.bjsxt.base001;
import java.util.HashMap;
import java.util.Map;
public class Test05 {
public static void main(String[] args) {
// 测试进入老年代的对象
// 参数:-Xmx1024M -Xms1024M -XX:+UseSerialGC -XX:MaxTenuringThreshold=15 -XX:+PrintGCDetails
for (int k = 0; k < 20; k++) {
for (int j = 0; j < 300; j++) {
byte[] b = new byte[1024 * 1024];
}
}
}
}
程序分析
每次使用1M,总共需要6000M内存
测试
参数配置
-Xmx1024M -Xms1024M -XX:+UseSerialGC -XX:MaxTenuringThreshold=10 -XX:+PrintGCDetails
初始化,最大内存,为1G
对象年龄,为10
运行
新生代,前10次进行GC
会有明显的效果,再往后GC新生代0K
说明,对象都已经不在新生代了