1 /* 2 * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved. 3 * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26 /** 27 * @test id=default 28 * @summary Test JMX memory beans 29 * @requires vm.gc.Shenandoah 30 * @modules java.base/jdk.internal.misc 31 * java.management 32 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xmx1g TestMemoryMXBeans -1 1024 33 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xms1g -Xmx1g TestMemoryMXBeans 1024 1024 34 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xms128m -Xmx1g TestMemoryMXBeans 128 1024 35 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xms1g -Xmx1g -XX:ShenandoahUncommitDelay=0 TestMemoryMXBeans 1024 1024 36 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -Xms128m -Xmx1g -XX:ShenandoahUncommitDelay=0 TestMemoryMXBeans 128 1024 37 */ 38 39 /** 40 * @test id=generational 41 * @summary Test JMX memory beans 42 * @requires vm.gc.Shenandoah 43 * @modules java.base/jdk.internal.misc 44 * java.management 45 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -Xmx1g TestMemoryMXBeans -1 1024 46 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -Xms1g -Xmx1g TestMemoryMXBeans 1024 1024 47 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -Xms128m -Xmx1g TestMemoryMXBeans 128 1024 48 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -Xms1g -Xmx1g -XX:ShenandoahUncommitDelay=0 TestMemoryMXBeans 1024 1024 49 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -Xms128m -Xmx1g -XX:ShenandoahUncommitDelay=0 TestMemoryMXBeans 128 1024 50 */ 51 52 import java.lang.management.*; 53 import java.util.*; 54 55 public class TestMemoryMXBeans { 56 57 public static void main(String[] args) throws Exception { 58 if (args.length < 2) { 59 throw new IllegalStateException("Should provide expected heap sizes"); 60 } 61 62 long initSize = 1L * Integer.parseInt(args[0]) * 1024 * 1024; 63 long maxSize = 1L * Integer.parseInt(args[1]) * 1024 * 1024; 64 65 // wait for GC to uncommit 66 Thread.sleep(1000); 67 68 testMemoryBean(initSize, maxSize); 69 } 70 71 public static void testMemoryBean(long initSize, long maxSize) { 72 MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); 73 long heapInit = memoryMXBean.getHeapMemoryUsage().getInit(); 74 long heapCommitted = memoryMXBean.getHeapMemoryUsage().getCommitted(); 75 long heapMax = memoryMXBean.getHeapMemoryUsage().getMax(); 76 long nonHeapInit = memoryMXBean.getNonHeapMemoryUsage().getInit(); 77 long nonHeapCommitted = memoryMXBean.getNonHeapMemoryUsage().getCommitted(); 78 long nonHeapMax = memoryMXBean.getNonHeapMemoryUsage().getMax(); 79 80 if (initSize > 0 && heapInit != initSize) { 81 throw new IllegalStateException("Init heap size is wrong: " + heapInit + " vs " + initSize); 82 } 83 if (maxSize > 0 && heapMax != maxSize) { 84 throw new IllegalStateException("Max heap size is wrong: " + heapMax + " vs " + maxSize); 85 } 86 if (initSize > 0 && maxSize > 0 && initSize != maxSize && heapCommitted == heapMax) { 87 throw new IllegalStateException("Committed heap size is max: " + heapCommitted + 88 " (init: " + initSize + ", max: " + maxSize + ")"); 89 } 90 if (initSize > 0 && maxSize > 0 && initSize == maxSize && heapCommitted != heapMax) { 91 throw new IllegalStateException("Committed heap size is not max: " + heapCommitted + 92 " (init: " + initSize + ", max: " + maxSize + ")"); 93 } 94 if (initSize > 0 && heapCommitted < initSize) { 95 throw new IllegalStateException("Committed heap size is below min: " + heapCommitted + 96 " (init: " + initSize + ", max: " + maxSize + ")"); 97 } 98 } 99 }