1. 程式人生 > >深入理解JVM學習筆記(二十七、JVM 記憶體分配----大物件直接分配到老年代)

深入理解JVM學習筆記(二十七、JVM 記憶體分配----大物件直接分配到老年代)

一、驗證

首先我們編寫如下程式

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的物件被分配進了老年代中。