1 /*
 2  * Copyright (c) 2014, 2020, 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  * @requires vm.bits == 64 & vm.opt.final.UseCompressedOops == true
29  * @library /test/lib
30  * @modules java.base/jdk.internal.misc
31  *          java.management
32  * @run driver CompressedClassSpaceSize
33  */
34 
35 import jdk.test.lib.process.ProcessTools;
36 import jdk.test.lib.process.OutputAnalyzer;
37 
38 public class CompressedClassSpaceSize {
39 
40     public static void main(String[] args) throws Exception {
41         ProcessBuilder pb;
42         OutputAnalyzer output;
43         // Minimum size is 1MB
44         pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=0",
45                                                    "-version");
46         output = new OutputAnalyzer(pb.start());
47         output.shouldContain("outside the allowed range")
48               .shouldHaveExitValue(1);
49 
50         // Invalid size of -1 should be handled correctly
51         pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=-1",
52                                                    "-version");
53         output = new OutputAnalyzer(pb.start());
54         output.shouldContain("Improperly specified VM option 'CompressedClassSpaceSize=-1'")
55               .shouldHaveExitValue(1);
56 
57 
58         // Maximum size is 3GB
59         pb = ProcessTools.createJavaProcessBuilder("-XX:CompressedClassSpaceSize=4g",
60                                                    "-version");
61         output = new OutputAnalyzer(pb.start());
62         output.shouldContain("outside the allowed range")
63               .shouldHaveExitValue(1);
64 
65 
66         // Make sure the minimum size is set correctly and printed
67         // (Note: ccs size are rounded up to the next larger root chunk boundary (16m).
68         // Note that this is **reserved** size and does not affect rss.
69         pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockDiagnosticVMOptions",
70                                                    "-XX:CompressedClassSpaceSize=1m",
71                                                    "-Xlog:gc+metaspace=trace",
72                                                    "-version");
73         output = new OutputAnalyzer(pb.start());
74         output.shouldMatch("Compressed class space.*16777216")
75               .shouldHaveExitValue(0);
76 
77 
78         // Make sure the maximum size is set correctly and printed
79         pb = ProcessTools.createJavaProcessBuilder("-XX:+UnlockDiagnosticVMOptions",
80                                                    "-XX:CompressedClassSpaceSize=3g",
81                                                    "-Xlog:gc+metaspace=trace",
82                                                    "-version");
83         output = new OutputAnalyzer(pb.start());
84         output.shouldMatch("Compressed class space.*3221225472")
85               .shouldHaveExitValue(0);








86     }
87 }
--- EOF ---