CompressedClassSpaceSize.java revision 8569:5bbf25472731
1/*
2 * Copyright (c) 2014, 2015, 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 */
23
24/*
25 * @test
26 * @bug 8022865
27 * @summary Tests for the -XX:CompressedClassSpaceSize command line option
28 * @library /testlibrary
29 * @modules java.base/sun.misc
30 *          java.management
31 * @run main CompressedClassSpaceSize
32 */
33import jdk.test.lib.*;
34
35public class CompressedClassSpaceSize {
36
37    public static void main(String[] args) throws Exception {
38        ProcessBuilder pb;
39        OutputAnalyzer output;
40        if (Platform.is64bit()) {
41            // Minimum size is 1MB
42            pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=0",
43                                                       "-version");
44            output = new OutputAnalyzer(pb.start());
45            output.shouldContain("outside the allowed range")
46                  .shouldHaveExitValue(1);
47
48            // Invalid size of -1 should be handled correctly
49            pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=-1",
50                                                       "-version");
51            output = new OutputAnalyzer(pb.start());
52            output.shouldContain("Improperly specified VM option 'CompressedClassSpaceSize=-1'")
53                  .shouldHaveExitValue(1);
54
55
56            // Maximum size is 3GB
57            pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=4g",
58                                                       "-version");
59            output = new OutputAnalyzer(pb.start());
60            output.shouldContain("outside the allowed range")
61                  .shouldHaveExitValue(1);
62
63
64            // Make sure the minimum size is set correctly and printed
65            pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockDiagnosticVMOptions",
66                                                       "-XX:CompressedClassSpaceSize=1m",
67                                                       "-XX:+PrintCompressedOopsMode",
68                                                       "-version");
69            output = new OutputAnalyzer(pb.start());
70            output.shouldContain("Compressed class space size: 1048576")
71                  .shouldHaveExitValue(0);
72
73
74            // Make sure the maximum size is set correctly and printed
75            pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockDiagnosticVMOptions",
76                                                       "-XX:CompressedClassSpaceSize=3g",
77                                                       "-XX:+PrintCompressedOopsMode",
78                                                       "-version");
79            output = new OutputAnalyzer(pb.start());
80            output.shouldContain("Compressed class space size: 3221225472")
81                  .shouldHaveExitValue(0);
82
83
84            pb = ProcessTools.createJavaProcessBuilder("-XX:-UseCompressedOops",
85                                                       "-XX:CompressedClassSpaceSize=1m",
86                                                       "-version");
87            output = new OutputAnalyzer(pb.start());
88            output.shouldContain("Setting CompressedClassSpaceSize has no effect when compressed class pointers are not used")
89                  .shouldHaveExitValue(0);
90
91
92            pb = ProcessTools.createJavaProcessBuilder("-XX:-UseCompressedClassPointers",
93                                                       "-XX:CompressedClassSpaceSize=1m",
94                                                       "-version");
95            output = new OutputAnalyzer(pb.start());
96            output.shouldContain("Setting CompressedClassSpaceSize has no effect when compressed class pointers are not used")
97                  .shouldHaveExitValue(0);
98        } else {
99            // 32bit platforms doesn't have compressed oops
100            pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=1m",
101                                                       "-version");
102            output = new OutputAnalyzer(pb.start());
103            output.shouldContain("Setting CompressedClassSpaceSize has no effect when compressed class pointers are not used")
104                  .shouldHaveExitValue(0);
105        }
106    }
107}
108