Path: blob/master/test/hotspot/jtreg/gc/metaspace/TestMetaspaceSizeFlags.java
40942 views
/*1* Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223package gc.metaspace;2425import jdk.test.lib.Asserts;26import jdk.test.lib.process.ProcessTools;27import jdk.test.lib.process.OutputAnalyzer;2829/*30* @test TestMetaspaceSizeFlags31* @bug 802465032* @summary Test that metaspace size flags can be set correctly33* @library /test/lib34* @modules java.base/jdk.internal.misc35* java.management36* @run driver gc.metaspace.TestMetaspaceSizeFlags37*/38public class TestMetaspaceSizeFlags {39public static final long K = 1024L;40public static final long M = 1024L * K;4142// HotSpot uses a number of different values to align memory size flags.43// This is currently the largest alignment (unless huge large pages are used).44public static final long MAX_ALIGNMENT = 32 * M;4546public static void main(String [] args) throws Exception {47testMaxMetaspaceSizeEQMetaspaceSize(MAX_ALIGNMENT, MAX_ALIGNMENT);48// 8024650: MaxMetaspaceSize was adjusted instead of MetaspaceSize.49testMaxMetaspaceSizeLTMetaspaceSize(MAX_ALIGNMENT, MAX_ALIGNMENT * 2);50testMaxMetaspaceSizeGTMetaspaceSize(MAX_ALIGNMENT * 2, MAX_ALIGNMENT);51}5253private static void testMaxMetaspaceSizeEQMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {54MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);55Asserts.assertEQ(maxMetaspaceSize, metaspaceSize);56Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);57Asserts.assertEQ(mf.metaspaceSize, metaspaceSize);58}5960private static void testMaxMetaspaceSizeLTMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {61MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);62Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);63Asserts.assertEQ(mf.metaspaceSize, maxMetaspaceSize);64}6566private static void testMaxMetaspaceSizeGTMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {67MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);68Asserts.assertGT(maxMetaspaceSize, metaspaceSize);69Asserts.assertGT(mf.maxMetaspaceSize, mf.metaspaceSize);70Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);71Asserts.assertEQ(mf.metaspaceSize, metaspaceSize);72}7374private static MetaspaceFlags runAndGetValue(long maxMetaspaceSize, long metaspaceSize) throws Exception {75OutputAnalyzer output = run(maxMetaspaceSize, metaspaceSize);76output.shouldNotMatch("Error occurred during initialization of VM\n.*");7778String stringMaxMetaspaceSize = output.firstMatch(".* MaxMetaspaceSize .* = (\\d+).*", 1);79String stringMetaspaceSize = output.firstMatch(".* MetaspaceSize .* = (\\d+).*", 1);8081return new MetaspaceFlags(Long.parseLong(stringMaxMetaspaceSize),82Long.parseLong(stringMetaspaceSize));83}8485private static OutputAnalyzer run(long maxMetaspaceSize, long metaspaceSize) throws Exception {86ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(87"-XX:MaxMetaspaceSize=" + maxMetaspaceSize,88"-XX:MetaspaceSize=" + metaspaceSize,89"-XX:-UseLargePages", // Prevent us from using 2GB large pages on solaris + sparc.90"-XX:+PrintFlagsFinal",91"-version");92return new OutputAnalyzer(pb.start());93}9495private static class MetaspaceFlags {96public long maxMetaspaceSize;97public long metaspaceSize;98public MetaspaceFlags(long maxMetaspaceSize, long metaspaceSize) {99this.maxMetaspaceSize = maxMetaspaceSize;100this.metaspaceSize = metaspaceSize;101}102}103}104105106