я пытаюсь вызвать сбой одновременного режима в jvm, и что-то меня смущает - PullRequest
0 голосов
/ 01 ноября 2019

мой env - это версия java "1.8.0_171" и мои параметры виртуальной машины jvm

/**
 * -Xloggc:./gc.log
 * -Xmx64m
 * -Xms64m
 * -XX:+PrintGCDetails
 * -XX:NewRatio=7
 * -XX:SurvivorRatio=2
 * -XX:+UseConcMarkSweepGC
 * -XX:MaxTenuringThreshold=5
 * -XX:-UseAdaptiveSizePolicy
 * -verbose:gc
 * -XX:+UseCMSInitiatingOccupancyOnly
 * -XX:CMSInitiatingOccupancyFraction=50
 * @throws InterruptedException
 */

пространство eden равно 4 м, s0 / s1 равно 2 м, а старое пространство равно 56 м, и это мой кодкоторый не создал одновременную ошибку модели

    public static void ConcurrentModeFail() throws InterruptedException {
        byte [] obj1 = new byte [33 * _1m];
        obj1 = null;
        byte [] obj3 = new byte [30 * _1m];

        //byte [] obj4 = new byte [3 * _1m];
        byte [] obj7 = new byte [10 * _1m];
        obj3 = null;
        byte [] obj5 = new byte [3 * _1m];
        byte [] obj6 = new byte [30 * _1m];
        sleep(1000);
    }

и gc.log равен

CommandLine flags: -XX:CMSInitiatingOccupancyFraction=50 -XX:InitialHeapSize=67108864 -XX:InitialTenuringThreshold=5 -XX:MaxHeapSize=67108864 -XX:MaxTenuringThreshold=5 -XX:NewRatio=7 -XX:OldPLABSize=16 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=2 -XX:-UseAdaptiveSizePolicy -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 
0.157: [GC (Allocation Failure) 0.158: [ParNew: 1800K->471K(6144K), 0.0015121 secs]0.159: [CMS: 33792K->451K(57344K), 0.0021897 secs] 35592K->451K(63488K), [Metaspace: 3302K->3302K(1056768K)], 0.0038315 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.170: [GC (Allocation Failure) 0.170: [ParNew: 3153K->0K(6144K), 0.0027538 secs]0.172: [CMS: 44486K->13743K(57344K), 0.0027681 secs] 44565K->13743K(63488K), [Metaspace: 3302K->3302K(1056768K)], 0.0056190 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
0.177: [GC (CMS Initial Mark) [1 CMS-initial-mark: 44463K(57344K)] 44463K(63488K), 0.0001255 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.178: [CMS-concurrent-mark-start]
0.179: [CMS-concurrent-mark: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.179: [CMS-concurrent-preclean-start]
0.179: [CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.179: [GC (CMS Final Remark) [YG occupancy: 81 K (6144 K)]0.179: [Rescan (parallel) , 0.0007065 secs]0.180: [weak refs processing, 0.0000106 secs]0.180: [class unloading, 0.0002053 secs]0.180: [scrub symbol table, 0.0002932 secs]0.180: [scrub string table, 0.0001511 secs][1 CMS-remark: 44463K(57344K)] 44545K(63488K), 0.0014447 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.180: [CMS-concurrent-sweep-start]
0.180: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
0.180: [CMS-concurrent-reset-start]
0.180: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 par new generation   total 6144K, used 246K [0x00000007bc000000, 0x00000007bc800000, 0x00000007bc800000)
  eden space 4096K,   6% used [0x00000007bc000000, 0x00000007bc03da00, 0x00000007bc400000)
  from space 2048K,   0% used [0x00000007bc400000, 0x00000007bc400000, 0x00000007bc600000)
  to   space 2048K,   0% used [0x00000007bc600000, 0x00000007bc600000, 0x00000007bc800000)
 concurrent mark-sweep generation total 57344K, used 44463K [0x00000007bc800000, 0x00000007c0000000, 0x00000007c0000000)
 Metaspace       used 3309K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 365K, capacity 388K, committed 512K, reserved 1048576K

, однако, когда я раскомментирую obj4, параллельная модель успешно создала

CommandLine flags: -XX:CMSInitiatingOccupancyFraction=50 -XX:InitialHeapSize=67108864 -XX:InitialTenuringThreshold=5 -XX:MaxHeapSize=67108864 -XX:MaxTenuringThreshold=5 -XX:NewRatio=7 -XX:OldPLABSize=16 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=2 -XX:-UseAdaptiveSizePolicy -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 
0.175: [GC (Allocation Failure) 0.175: [ParNew: 1801K->463K(6144K), 0.0015554 secs]0.177: [CMS: 33792K->451K(57344K), 0.0022387 secs] 35593K->451K(63488K), [Metaspace: 3302K->3302K(1056768K)], 0.0039279 secs] [Times: user=0.00 sys=0.01, real=0.01 secs] 
0.187: [GC (Allocation Failure) 0.187: [ParNew: 3153K->0K(6144K), 0.0027299 secs] 44565K->44486K(63488K), 0.0027956 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
0.190: [GC (CMS Initial Mark) [1 CMS-initial-mark: 44486K(57344K)] 47558K(63488K), 0.0000976 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.190: [CMS-concurrent-mark-start]
0.190: [GC (Allocation Failure) 0.190: [ParNew: 3072K->0K(6144K), 0.0026940 secs]0.193: [CMS0.194: [CMS-concurrent-mark: 0.001/0.003 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
 (concurrent mode failure): 47560K->16815K(57344K), 0.0036805 secs] 47558K->16815K(63488K), [Metaspace: 3302K->3302K(1056768K)], 0.0064597 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
Heap
 par new generation   total 6144K, used 246K [0x00000007bc000000, 0x00000007bc800000, 0x00000007bc800000)
  eden space 4096K,   6% used [0x00000007bc000000, 0x00000007bc03da00, 0x00000007bc400000)
  from space 2048K,   0% used [0x00000007bc600000, 0x00000007bc600000, 0x00000007bc800000)
  to   space 2048K,   0% used [0x00000007bc400000, 0x00000007bc400000, 0x00000007bc600000)
 concurrent mark-sweep generation total 57344K, used 47535K [0x00000007bc800000, 0x00000007c0000000, 0x00000007c0000000)
 Metaspace       used 3309K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 365K, capacity 388K, committed 512K, reserved 1048576K

Теперь я запутался в этой ситуации, почему это распределение 3м имеет значение?

...