深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)

一、验证

首先我们编写如下程序

package com.zjt.test.jvm008;

public class Main {
	public static void main(String[] args) {
		byte [] b4 = new byte[40 * 1024 * 1024];
	}
}

打开GC控制台输出运行程序,可以看到如下运行结果。

深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)_第1张图片

 从上图可以看出,在程序中定义的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配置如下:

深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)_第2张图片

 运行结果如下:

深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)_第3张图片

 可以看出,对象被分配进了eden区域。

2、接下来我们设定-XX:PretenureSizeThreshold参数为6M,RunConfig配置如下:

深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)_第4张图片

运行结果如下:

深入理解JVM学习笔记(二十七、JVM 内存分配----大对象直接分配到老年代)_第5张图片

 从上图可以看出,7M的对象被分配进了老年代中。

 

你可能感兴趣的:(JVM)