Mercurial > hg > graal-jvmci-8
annotate src/share/vm/prims/whitebox.cpp @ 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 | 9ce110b1d14a |
children | f54c85acc043 |
rev | line source |
---|---|
5915 | 1 /* |
10155
f258c5828eb8
8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents:
10116
diff
changeset
|
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. |
5915 | 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 #include "precompiled.hpp" | |
26 | |
27 #include "memory/universe.hpp" | |
28 #include "oops/oop.inline.hpp" | |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
29 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
30 #include "classfile/symbolTable.hpp" |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
31 #include "classfile/classLoaderData.hpp" |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
32 |
5915 | 33 #include "prims/whitebox.hpp" |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
34 #include "prims/wbtestmethods/parserTests.hpp" |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
35 |
5915 | 36 #include "runtime/interfaceSupport.hpp" |
37 #include "runtime/os.hpp" | |
38 #include "utilities/debug.hpp" | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
39 #include "utilities/macros.hpp" |
5915 | 40 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
41 #if INCLUDE_ALL_GCS |
5915 | 42 #include "gc_implementation/g1/concurrentMark.hpp" |
43 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" | |
44 #include "gc_implementation/g1/heapRegionRemSet.hpp" | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
45 #endif // INCLUDE_ALL_GCS |
5915 | 46 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
47 #ifdef INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
48 #include "services/memTracker.hpp" |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
49 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
50 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
51 #include "compiler/compileBroker.hpp" |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
52 #include "runtime/compilationPolicy.hpp" |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
53 |
5915 | 54 bool WhiteBox::_used = false; |
55 | |
56 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) | |
57 return (jlong)(void*)JNIHandles::resolve(obj); | |
58 WB_END | |
59 | |
60 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o)) | |
61 return heapOopSize; | |
62 WB_END | |
63 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
64 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
65 class WBIsKlassAliveClosure : public KlassClosure { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
66 Symbol* _name; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
67 bool _found; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
68 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
69 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {} |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
70 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
71 void do_klass(Klass* k) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
72 if (_found) return; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
73 Symbol* ksym = k->name(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
74 if (ksym->fast_compare(_name) == 0) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
75 _found = true; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
76 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
77 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
78 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
79 bool found() const { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
80 return _found; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
81 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
82 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
83 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
84 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name)) |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
85 Handle h_name = JNIHandles::resolve(name); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
86 if (h_name.is_null()) return false; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
87 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
88 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
89 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
90 WBIsKlassAliveClosure closure(sym); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
91 ClassLoaderDataGraph::classes_do(&closure); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
92 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
93 return closure.found(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
94 WB_END |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
95 |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
96 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
97 CollectorPolicy * p = Universe::heap()->collector_policy(); |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
98 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
99 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT, |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
100 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
101 p->min_alignment(), p->max_alignment()); |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
102 } |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
103 WB_END |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
104 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
105 #if INCLUDE_ALL_GCS |
5915 | 106 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj)) |
107 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
108 oop result = JNIHandles::resolve(obj); | |
109 const HeapRegion* hr = g1->heap_region_containing(result); | |
110 return hr->isHumongous(); | |
111 WB_END | |
112 | |
113 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o)) | |
114 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
115 size_t nr = g1->free_regions(); | |
116 return (jlong)nr; | |
117 WB_END | |
118 | |
119 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o)) | |
120 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
121 ConcurrentMark* cm = g1->concurrent_mark(); | |
122 return cm->concurrent_marking_in_progress(); | |
123 WB_END | |
124 | |
125 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o)) | |
126 return (jint)HeapRegion::GrainBytes; | |
127 WB_END | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
128 #endif // INCLUDE_ALL_GCS |
5915 | 129 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
130 #ifdef INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
131 // Alloc memory using the test memory type so that we can use that to see if |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
132 // NMT picks it up correctly |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
133 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
134 jlong addr = 0; |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
135 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
136 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) { |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
137 addr = (jlong)(uintptr_t)os::malloc(size, mtTest); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
138 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
139 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
140 return addr; |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
141 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
142 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
143 // Free the memory allocated by NMTAllocTest |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
144 WB_ENTRY(void, WB_NMTFree(JNIEnv* env, jobject o, jlong mem)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
145 os::free((void*)(uintptr_t)mem, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
146 WB_END |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
147 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
148 WB_ENTRY(jlong, WB_NMTReserveMemory(JNIEnv* env, jobject o, jlong size)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
149 jlong addr = 0; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
150 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
151 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) { |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
152 addr = (jlong)(uintptr_t)os::reserve_memory(size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
153 MemTracker::record_virtual_memory_type((address)addr, mtTest); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
154 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
155 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
156 return addr; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
157 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
158 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
159 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
160 WB_ENTRY(void, WB_NMTCommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
161 os::commit_memory((char *)(uintptr_t)addr, size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
162 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
163 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
164 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
165 WB_ENTRY(void, WB_NMTUncommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
166 os::uncommit_memory((char *)(uintptr_t)addr, size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
167 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
168 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
169 WB_ENTRY(void, WB_NMTReleaseMemory(JNIEnv* env, jobject o, jlong addr, jlong size)) |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
170 os::release_memory((char *)(uintptr_t)addr, size); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
171 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
172 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
173 // Block until the current generation of NMT data to be merged, used to reliably test the NMT feature |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
174 WB_ENTRY(jboolean, WB_NMTWaitForDataMerge(JNIEnv* env)) |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
175 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
176 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
177 return false; |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
178 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
179 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
180 return MemTracker::wbtest_wait_for_data_merge(); |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
181 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
182 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
183 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
184 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
185 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
186 assert(method != NULL, "method should not be null"); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
187 ThreadToNativeFromVM ttn(thread); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
188 return env->FromReflectedMethod(method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
189 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
190 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
191 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
192 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
193 CodeCache::mark_all_nmethods_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
194 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
195 VMThread::execute(&op); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
196 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
197 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
198 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
199 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
200 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
201 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
202 int result = 0; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
203 nmethod* code = mh->code(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
204 if (code != NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
205 code->mark_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
206 ++result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
207 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
208 result += CodeCache::mark_for_deoptimization(mh()); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
209 if (result > 0) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
210 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
211 VMThread::execute(&op); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
212 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
213 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
214 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
215 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
216 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
217 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
218 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
219 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
220 nmethod* code = mh->code(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
221 if (code == NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
222 return JNI_FALSE; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
223 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
224 return (code->is_alive() && !code->is_marked_for_deoptimization()); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
225 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
226 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
227 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
228 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
229 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
230 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
231 return CompilationPolicy::can_be_compiled(mh, comp_level); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
232 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
233 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
234 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
235 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
236 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
237 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
238 return mh->queued_for_compilation(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
239 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
240 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
241 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
242 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
243 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
244 nmethod* code = mh->code(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
245 return (code != NULL ? code->comp_level() : CompLevel_none); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
246 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
247 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
248 |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
249 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
250 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
251 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
252 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
253 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
254 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
255 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
256 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
257 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
258 bool result = mh->dont_inline(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
259 mh->set_dont_inline(value == JNI_TRUE); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
260 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
261 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
262 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
263 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
264 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
265 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
266 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
267 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
268 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
269 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
270 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
271 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
272 bool result = mh->force_inline(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
273 mh->set_force_inline(value == JNI_TRUE); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
274 return result; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
275 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
276 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
277 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level)) |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
278 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
279 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
280 nmethod* nm = CompileBroker::compile_method(mh, InvocationEntryBci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
281 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
282 return (mh->queued_for_compilation() || nm != NULL); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
283 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
284 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
285 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
286 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
287 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
288 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
289 MethodData* mdo = mh->method_data(); |
10107 | 290 MethodCounters* mcs = mh->method_counters(); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
291 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
292 if (mdo != NULL) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
293 mdo->init(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
294 ResourceMark rm; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
295 int arg_count = mdo->method()->size_of_parameters(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
296 for (int i = 0; i < arg_count; i++) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
297 mdo->set_arg_modified(i, 0); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
298 } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
299 } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
300 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
301 mh->clear_not_c1_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
302 mh->clear_not_c2_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
303 mh->clear_not_c2_osr_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
304 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); |
10107 | 305 if (mcs != NULL) { |
306 mcs->backedge_counter()->init(); | |
307 mcs->invocation_counter()->init(); | |
308 mcs->set_interpreter_invocation_count(0); | |
309 mcs->set_interpreter_throwout_count(0); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
310 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
311 #ifdef TIERED |
10107 | 312 mcs->set_rate(0.0F); |
313 mh->set_prev_event_count(0, THREAD); | |
314 mh->set_prev_time(0, THREAD); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
315 #endif |
10107 | 316 } |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
317 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
318 |
8850 | 319 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) |
320 ResourceMark rm(THREAD); | |
321 int len; | |
10155
f258c5828eb8
8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents:
10116
diff
changeset
|
322 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false); |
f258c5828eb8
8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents:
10116
diff
changeset
|
323 return (StringTable::lookup(name, len) != NULL); |
8850 | 324 WB_END |
325 | |
326 | |
327 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) | |
328 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); | |
329 Universe::heap()->collect(GCCause::_last_ditch_collection); | |
330 WB_END | |
331 | |
10157 | 332 |
333 WB_ENTRY(jlong, WB_ReserveMemory(JNIEnv* env, jobject o, jlong size)) | |
334 return (jlong)os::reserve_memory(size, NULL, 0); | |
335 WB_END | |
336 | |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
337 //Some convenience methods to deal with objects from java |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
338 int WhiteBox::offset_for_field(const char* field_name, oop object, |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
339 Symbol* signature_symbol) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
340 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
341 Thread* THREAD = Thread::current(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
342 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
343 //Get the class of our object |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
344 Klass* arg_klass = object->klass(); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
345 //Turn it into an instance-klass |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
346 InstanceKlass* ik = InstanceKlass::cast(arg_klass); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
347 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
348 //Create symbols to look for in the class |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
349 TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name), |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
350 THREAD); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
351 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
352 //To be filled in with an offset of the field we're looking for |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
353 fieldDescriptor fd; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
354 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
355 Klass* res = ik->find_field(name_symbol, signature_symbol, &fd); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
356 if (res == NULL) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
357 tty->print_cr("Invalid layout of %s at %s", ik->external_name(), |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
358 name_symbol->as_C_string()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
359 fatal("Invalid layout of preloaded class"); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
360 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
361 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
362 //fetch the field at the offset we've found |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
363 int dest_offset = fd.offset(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
364 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
365 return dest_offset; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
366 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
367 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
368 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
369 const char* WhiteBox::lookup_jstring(const char* field_name, oop object) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
370 int offset = offset_for_field(field_name, object, |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
371 vmSymbols::string_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
372 oop string = object->obj_field(offset); |
6202
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
373 if (string == NULL) { |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
374 return NULL; |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
375 } |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
376 const char* ret = java_lang_String::as_utf8_string(string); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
377 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
378 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
379 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
380 bool WhiteBox::lookup_bool(const char* field_name, oop object) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
381 int offset = |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
382 offset_for_field(field_name, object, vmSymbols::bool_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
383 bool ret = (object->bool_field(offset) == JNI_TRUE); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
384 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
385 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
386 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
387 |
5915 | 388 #define CC (char*) |
389 | |
390 static JNINativeMethod methods[] = { | |
391 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress }, | |
392 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize }, | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
393 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive }, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
394 {CC"parseCommandLine", |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
395 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;", |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
396 (void*) &WB_ParseCommandLine |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
397 }, |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
398 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes }, |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
399 #if INCLUDE_ALL_GCS |
5915 | 400 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, |
401 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous }, | |
402 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions }, | |
403 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize }, | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
404 #endif // INCLUDE_ALL_GCS |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
405 #ifdef INCLUDE_NMT |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
406 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
407 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
408 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
409 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
410 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
411 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
412 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge}, |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
413 #endif // INCLUDE_NMT |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
414 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
415 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
416 (void*)&WB_DeoptimizeMethod }, |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
417 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
418 (void*)&WB_IsMethodCompiled }, |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
419 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;I)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
420 (void*)&WB_IsMethodCompilable}, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
421 {CC"isMethodQueuedForCompilation", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
422 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation}, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
423 {CC"makeMethodNotCompilable", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
424 CC"(Ljava/lang/reflect/Executable;I)V", (void*)&WB_MakeMethodNotCompilable}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
425 {CC"testSetDontInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
426 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod}, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
427 {CC"getMethodCompilationLevel", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
428 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodCompilationLevel}, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
429 {CC"getCompileQueuesSize", |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
430 CC"()I", (void*)&WB_GetCompileQueuesSize}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
431 {CC"testSetForceInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
432 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
433 {CC"enqueueMethodForCompilation", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
434 CC"(Ljava/lang/reflect/Executable;I)Z", (void*)&WB_EnqueueMethodForCompilation}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
435 {CC"clearMethodState", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
436 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, |
8850 | 437 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
438 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, | |
10157 | 439 |
440 {CC"reserveMemory", CC"(J)J", (void*)&WB_ReserveMemory }, | |
5915 | 441 }; |
442 | |
443 #undef CC | |
444 | |
445 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) | |
446 { | |
447 if (WhiteBoxAPI) { | |
448 // Make sure that wbclass is loaded by the null classloader | |
449 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass()); | |
450 Handle loader(ikh->class_loader()); | |
451 if (loader.is_null()) { | |
10196
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
452 ResourceMark rm; |
5915 | 453 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI |
10196
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
454 bool result = true; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
455 // one by one registration natives for exception catching |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
456 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
457 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) { |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
458 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) { |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
459 result = false; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
460 if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) { |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
461 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
462 // ignoring the exception |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
463 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
464 env->ExceptionClear(); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
465 } else { |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
466 // register is failed w/o exception or w/ unexpected exception |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
467 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
468 env->UnregisterNatives(wbclass); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
469 break; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
470 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
471 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
472 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
473 |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
474 if (result) { |
5915 | 475 WhiteBox::set_used(); |
476 } | |
477 } | |
478 } | |
479 } | |
480 JVM_END |