深入理解JVM學習筆記(二十七、JVM 記憶體分配----大物件直接分配到老年代)
阿新 • • 發佈:2018-12-20
一、驗證
首先我們編寫如下程式
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的物件被分配進了老年代中。