test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java

Wed, 27 Aug 2014 08:19:12 -0400

author
zgu
date
Wed, 27 Aug 2014 08:19:12 -0400
changeset 7074
833b0f92429a
parent 7044
8a7429682242
child 7238
85f4c4ecc963
permissions
-rw-r--r--

8046598: Scalable Native memory tracking development
Summary: Enhance scalability of native memory tracking
Reviewed-by: coleenp, ctornqvi, gtriantafill

     1 /*
     2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /*
    25  * @test
    26  * @key gc
    27  * @bug 8049831
    28  * @library /testlibrary /testlibrary/whitebox
    29  * @build TestCMSClassUnloadingEnabledHWM AllocateBeyondMetaspaceSize
    30  * @run main ClassFileInstaller sun.hotspot.WhiteBox
    31  * @run driver TestCMSClassUnloadingEnabledHWM
    32  * @summary Test that -XX:-CMSClassUnloadingEnabled will trigger a Full GC when more than MetaspaceSize metadata is allocated.
    33  */
    35 import com.oracle.java.testlibrary.OutputAnalyzer;
    36 import com.oracle.java.testlibrary.ProcessTools;
    38 import java.util.ArrayList;
    39 import java.util.Arrays;
    41 public class TestCMSClassUnloadingEnabledHWM {
    42   private static long MetaspaceSize = 32 * 1024 * 1024;
    43   private static long YoungGenSize  = 32 * 1024 * 1024;
    45   private static OutputAnalyzer run(boolean enableUnloading) throws Exception {
    46     ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
    47       "-Xbootclasspath/a:.",
    48       "-XX:+UnlockDiagnosticVMOptions",
    49       "-XX:+WhiteBoxAPI",
    50       "-XX:MetaspaceSize=" + MetaspaceSize,
    51       "-Xmn" + YoungGenSize,
    52       "-XX:+UseConcMarkSweepGC",
    53       "-XX:" + (enableUnloading ? "+" : "-") + "CMSClassUnloadingEnabled",
    54       "-XX:+PrintHeapAtGC",
    55       "-XX:+PrintGCDetails",
    56       "AllocateBeyondMetaspaceSize",
    57       "" + MetaspaceSize,
    58       "" + YoungGenSize);
    59     return new OutputAnalyzer(pb.start());
    60   }
    62   public static OutputAnalyzer runWithCMSClassUnloading() throws Exception {
    63     return run(true);
    64   }
    66   public static OutputAnalyzer runWithoutCMSClassUnloading() throws Exception {
    67     return run(false);
    68   }
    70   public static void testWithoutCMSClassUnloading() throws Exception {
    71     // -XX:-CMSClassUnloadingEnabled is used, so we expect a full GC instead of a concurrent cycle.
    72     OutputAnalyzer out = runWithoutCMSClassUnloading();
    74     out.shouldMatch(".*Full GC.*");
    75     out.shouldNotMatch(".*CMS Initial Mark.*");
    76   }
    78   public static void testWithCMSClassUnloading() throws Exception {
    79     // -XX:+CMSClassUnloadingEnabled is used, so we expect a concurrent cycle instead of a full GC.
    80     OutputAnalyzer out = runWithCMSClassUnloading();
    82     out.shouldMatch(".*CMS Initial Mark.*");
    83     out.shouldNotMatch(".*Full GC.*");
    84   }
    86   public static void main(String args[]) throws Exception {
    87     testWithCMSClassUnloading();
    88     testWithoutCMSClassUnloading();
    89   }
    90 }

mercurial