annotate test/testlibrary/whitebox/sun/hotspot/WhiteBox.java @ 10241:d17700c82d7d

8006088: Incompatible heap size flags accepted by VM Summary: Make processing of minimum, initial and maximum heap size more intiutive by removing previous limitations on allowed values, and make error reporting consistent. Further, fix errors in ergonomic heap sizing. Reviewed-by: johnc, jwilhelm, tamao
author tschatzl
date Mon, 06 May 2013 17:19:42 +0200
parents f32b6c267d2e
children f54c85acc043
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1 /*
10092
b0301c02f38e 8012048: JDK8 b85 source with GPL header errors
katleman
parents: 8850
diff changeset
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
4 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
7 * published by the Free Software Foundation.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
8 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
13 * accompanied this code).
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
14 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
18 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
21 * questions.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
22 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
23 */
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
24
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
25 package sun.hotspot;
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 7971
diff changeset
26
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
27 import java.lang.reflect.Executable;
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
28 import java.security.BasicPermission;
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
29 import sun.hotspot.parser.DiagnosticCommand;
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
30
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
31 public class WhiteBox {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
32
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
33 @SuppressWarnings("serial")
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
34 public static class WhiteBoxPermission extends BasicPermission {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
35 public WhiteBoxPermission(String s) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
36 super(s);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
37 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
38 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
39
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
40 private WhiteBox() {}
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
41 private static final WhiteBox instance = new WhiteBox();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
42 private static native void registerNatives();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
43
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44 /**
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
45 * Returns the singleton WhiteBox instance.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
46 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
47 * The returned WhiteBox object should be carefully guarded
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
48 * by the caller, since it can be used to read and write data
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
49 * at arbitrary memory addresses. It must never be passed to
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
50 * untrusted code.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
51 */
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
52 public synchronized static WhiteBox getWhiteBox() {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
53 SecurityManager sm = System.getSecurityManager();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
54 if (sm != null) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
55 sm.checkPermission(new WhiteBoxPermission("getInstance"));
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
56 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
57 return instance;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
58 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
59
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
60 static {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
61 registerNatives();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
62 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
63
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10157
diff changeset
64 // Arguments
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10157
diff changeset
65 public native void printHeapSizes();
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10157
diff changeset
66
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
67 // Memory
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
68 public native long getObjectAddress(Object o);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
69 public native int getHeapOopSize();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
70
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
71 // Runtime
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
72 // Make sure class name is in the correct format
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
73 public boolean isClassAlive(String name) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
74 return isClassAlive0(name.replace('.', '/'));
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
75 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
76 private native boolean isClassAlive0(String name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5978
diff changeset
77
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
78 // G1
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
79 public native boolean g1InConcurrentMark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
80 public native boolean g1IsHumongous(Object o);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
81 public native long g1NumFreeRegions();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
82 public native int g1RegionSize();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
83 public native Object[] parseCommandLine(String commandline, DiagnosticCommand[] args);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
84
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
85 // NMT
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
86 public native long NMTMalloc(long size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
87 public native void NMTFree(long mem);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
88 public native long NMTReserveMemory(long size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
89 public native void NMTCommitMemory(long addr, long size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
90 public native void NMTUncommitMemory(long addr, long size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
91 public native void NMTReleaseMemory(long addr, long size);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
92 public native boolean NMTWaitForDataMerge();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 7971
diff changeset
93
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 7971
diff changeset
94 // Compiler
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 7971
diff changeset
95 public native void deoptimizeAll();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
96 public native boolean isMethodCompiled(Executable method);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
97 public boolean isMethodCompilable(Executable method) {
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
98 return isMethodCompilable(method, -1 /*any*/);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
99 }
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
100 public native boolean isMethodCompilable(Executable method, int compLevel);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
101 public native boolean isMethodQueuedForCompilation(Executable method);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
102 public native int deoptimizeMethod(Executable method);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
103 public void makeMethodNotCompilable(Executable method) {
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
104 makeMethodNotCompilable(method, -1 /*any*/);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
105 }
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
106 public native void makeMethodNotCompilable(Executable method, int compLevel);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
107 public native int getMethodCompilationLevel(Executable method);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
108 public native boolean testSetDontInlineMethod(Executable method, boolean value);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 7971
diff changeset
109 public native int getCompileQueuesSize();
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
110 public native boolean testSetForceInlineMethod(Executable method, boolean value);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
111 public native boolean enqueueMethodForCompilation(Executable method, int compLevel);
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
112 public native void clearMethodState(Executable method);
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8098
diff changeset
113
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
114 // Intered strings
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8098
diff changeset
115 public native boolean isInStringTable(String str);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8098
diff changeset
116
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10117
diff changeset
117 // Memory
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10117
diff changeset
118 public native long reserveMemory(long size);
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10117
diff changeset
119
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8098
diff changeset
120 // force Full GC
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8098
diff changeset
121 public native void fullGC();
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
122 }