在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ 對(duì)于大對(duì)象Minor GC的疑問(wèn)

對(duì)于大對(duì)象Minor GC的疑問(wèn)

一個(gè)很簡(jiǎn)單的GC測(cè)試,但是沒(méi)有打印出預(yù)期的效果。
JDK1.8.0_131,JVM參數(shù)如下:

-Xmx50m -Xms50m -Xmn8m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+PrintGC
    public static void main(String[] args) {
        Object[] list = new Object[10];
        for(int i=0; i<10 ; i++) {
            System.out.println(">>>>>>>>>>" + i);
            list[i] = new byte[3*1024*1024];
        }
    }

console打印如下:

>>>>>>>>>>0
>>>>>>>>>>1
>>>>>>>>>>2
>>>>>>>>>>3
>>>>>>>>>>4
>>>>>>>>>>5
>>>>>>>>>>6
>>>>>>>>>>7
>>>>>>>>>>8
>>>>>>>>>>9
Heap
 PSYoungGen      total 6144K, used 2139K [0x00000000ff800000, 0x0000000100000000, 0x0000000100000000)
  eden space 4096K, 52% used [0x00000000ff800000,0x00000000ffa16fa0,0x00000000ffc00000)
  from space 2048K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x0000000100000000)
  to   space 2048K, 0% used [0x00000000ffc00000,0x00000000ffc00000,0x00000000ffe00000)
 ParOldGen       total 43008K, used 30720K [0x00000000fce00000, 0x00000000ff800000, 0x00000000ff800000)
  object space 43008K, 71% used [0x00000000fce00000,0x00000000fec000a0,0x00000000ff800000)
 Metaspace       used 3498K, capacity 4498K, committed 4864K, reserved 1056768K
  class space    used 387K, capacity 390K, committed 512K, reserved 1048576K

雖然最終看到對(duì)象進(jìn)入了老年代,但是Minor GC的過(guò)程都沒(méi)有打印出來(lái),如果將new byte[3*1024*1024] 改為 new byte[1*1024*1024],即如下如所示:

    public static void main(String[] args) {
        Object[] list = new Object[10];
        for(int i=0; i<10 ; i++) {
            System.out.println(">>>>>>>>>>" + i);
            list[i] = new byte[1*1024*1024];
        }
    }

console打印如下:

>>>>>>>>>>0
>>>>>>>>>>1
[GC (Allocation Failure) [PSYoungGen: 3081K->1896K(6144K)] 3081K->1904K(49152K), 0.0014582 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
>>>>>>>>>>2
>>>>>>>>>>3
>>>>>>>>>>4
[GC (Allocation Failure) [PSYoungGen: 5087K->1864K(6144K)] 5095K->4944K(49152K), 0.0017647 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
>>>>>>>>>>5
>>>>>>>>>>6
>>>>>>>>>>7
[GC (Allocation Failure) [PSYoungGen: 5124K->1784K(6144K)] 8204K->7936K(49152K), 0.0012156 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
>>>>>>>>>>8
>>>>>>>>>>9
Heap
 PSYoungGen      total 6144K, used 5009K [0x00000000ff800000, 0x0000000100000000, 0x0000000100000000)
  eden space 4096K, 78% used [0x00000000ff800000,0x00000000ffb26620,0x00000000ffc00000)
  from space 2048K, 87% used [0x00000000ffc00000,0x00000000ffdbe040,0x00000000ffe00000)
  to   space 2048K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x0000000100000000)
 ParOldGen       total 43008K, used 6152K [0x00000000fce00000, 0x00000000ff800000, 0x00000000ff800000)
  object space 43008K, 14% used [0x00000000fce00000,0x00000000fd402060,0x00000000ff800000)
 Metaspace       used 3495K, capacity 4498K, committed 4864K, reserved 1056768K
  class space    used 387K, capacity 390K, committed 512K, reserved 1048576K

可以看到有清楚的Minor GC的過(guò)程,這是為什么呢?是JVM對(duì)這種大對(duì)象做了優(yōu)化以至于直接分配至老年代了嗎?

回答
編輯回答
菊外人

深入理解JVM里面不是有嘛,大對(duì)象直接進(jìn)入老年代

2017年8月29日 06:02