Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/test/gc/metaspace/TestMetaspaceSizeFlags.java
32284 views
/*1* Copyright (c) 2013, 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*/2223import com.oracle.java.testlibrary.Asserts;24import com.oracle.java.testlibrary.OutputAnalyzer;25import com.oracle.java.testlibrary.ProcessTools;2627/*28* @test TestMetaspaceSizeFlags29* @key gc30* @bug 802465031* @summary Test that metaspace size flags can be set correctly32* @library /testlibrary33*/34public class TestMetaspaceSizeFlags {35public static final long K = 1024L;36public static final long M = 1024L * K;3738// HotSpot uses a number of different values to align memory size flags.39// This is currently the largest alignment (unless huge large pages are used).40public static final long MAX_ALIGNMENT = 32 * M;4142public static void main(String [] args) throws Exception {43testMaxMetaspaceSizeEQMetaspaceSize(MAX_ALIGNMENT, MAX_ALIGNMENT);44// 8024650: MaxMetaspaceSize was adjusted instead of MetaspaceSize.45testMaxMetaspaceSizeLTMetaspaceSize(MAX_ALIGNMENT, MAX_ALIGNMENT * 2);46testMaxMetaspaceSizeGTMetaspaceSize(MAX_ALIGNMENT * 2, MAX_ALIGNMENT);47testTooSmallInitialMetaspace(0, 0);48testTooSmallInitialMetaspace(0, MAX_ALIGNMENT);49testTooSmallInitialMetaspace(MAX_ALIGNMENT, 0);50}5152private static void testMaxMetaspaceSizeEQMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {53MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);54Asserts.assertEQ(maxMetaspaceSize, metaspaceSize);55Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);56Asserts.assertEQ(mf.metaspaceSize, metaspaceSize);57}5859private static void testMaxMetaspaceSizeLTMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {60MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);61Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);62Asserts.assertEQ(mf.metaspaceSize, maxMetaspaceSize);63}6465private static void testMaxMetaspaceSizeGTMetaspaceSize(long maxMetaspaceSize, long metaspaceSize) throws Exception {66MetaspaceFlags mf = runAndGetValue(maxMetaspaceSize, metaspaceSize);67Asserts.assertGT(maxMetaspaceSize, metaspaceSize);68Asserts.assertGT(mf.maxMetaspaceSize, mf.metaspaceSize);69Asserts.assertEQ(mf.maxMetaspaceSize, maxMetaspaceSize);70Asserts.assertEQ(mf.metaspaceSize, metaspaceSize);71}7273private static void testTooSmallInitialMetaspace(long maxMetaspaceSize, long metaspaceSize) throws Exception {74OutputAnalyzer output = run(maxMetaspaceSize, metaspaceSize);75output.shouldContain("Too small initial Metaspace size");76}7778private static MetaspaceFlags runAndGetValue(long maxMetaspaceSize, long metaspaceSize) throws Exception {79OutputAnalyzer output = run(maxMetaspaceSize, metaspaceSize);80output.shouldNotMatch("Error occurred during initialization of VM\n.*");8182String stringMaxMetaspaceSize = output.firstMatch(".* MaxMetaspaceSize .* := (\\d+).*", 1);83String stringMetaspaceSize = output.firstMatch(".* MetaspaceSize .* := (\\d+).*", 1);8485return new MetaspaceFlags(Long.parseLong(stringMaxMetaspaceSize),86Long.parseLong(stringMetaspaceSize));87}8889private static OutputAnalyzer run(long maxMetaspaceSize, long metaspaceSize) throws Exception {90ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(91"-XX:MaxMetaspaceSize=" + maxMetaspaceSize,92"-XX:MetaspaceSize=" + metaspaceSize,93"-XX:-UseLargePages", // Prevent us from using 2GB large pages on solaris + sparc.94"-XX:+PrintFlagsFinal",95"-version");96return new OutputAnalyzer(pb.start());97}9899private static class MetaspaceFlags {100public long maxMetaspaceSize;101public long metaspaceSize;102public MetaspaceFlags(long maxMetaspaceSize, long metaspaceSize) {103this.maxMetaspaceSize = maxMetaspaceSize;104this.metaspaceSize = metaspaceSize;105}106}107}108109110