一、验证
首先我们编写如下程序
package com.zjt.test.jvm008;
public class Main {
public static void main(String[] args) {
byte [] b4 = new byte[40 * 1024 * 1024];
}
}
打开GC控制台输出运行程序,可以看到如下运行结果。
从上图可以看出,在程序中定义的40M的对象直接被分配进了老年代。这也就验证了之前的理论:大对象直接进入老年代。
二、大对象阈值设置
那么对于到底多大的对象才属于大对象呢,JVM有一个参数可以让我们设定:-XX:PretenureSizeThreshold。下面我们来尝试一下。
首先编写如下程序:定义一个7M的对象。
package com.zjt.test.jvm008;
public class Main {
public static void main(String[] args) {
byte [] b4 = new byte[7 * 1024 * 1024];
}
}
1、首先我们不设定-XX:PretenureSizeThreshold参数,RunConfig配置如下:
运行结果如下:
可以看出,对象被分配进了eden区域。
2、接下来我们设定-XX:PretenureSizeThreshold参数为6M,RunConfig配置如下:
运行结果如下:
从上图可以看出,7M的对象被分配进了老年代中。