Mercurial > hg > truffle
annotate src/share/vm/prims/whitebox.cpp @ 12233:40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation.
Reviewed-by: stefank, dholmes
author | tschatzl |
---|---|
date | Wed, 11 Sep 2013 16:25:02 +0200 |
parents | 5fd8e2fbafd4 |
children | 9d8b29a0548c 8f07aa079343 |
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 |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
36 #include "runtime/arguments.hpp" |
5915 | 37 #include "runtime/interfaceSupport.hpp" |
38 #include "runtime/os.hpp" | |
39 #include "utilities/debug.hpp" | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
40 #include "utilities/macros.hpp" |
10341
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
41 #include "utilities/exceptions.hpp" |
5915 | 42 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
43 #if INCLUDE_ALL_GCS |
5915 | 44 #include "gc_implementation/g1/concurrentMark.hpp" |
45 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" | |
46 #include "gc_implementation/g1/heapRegionRemSet.hpp" | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
47 #endif // INCLUDE_ALL_GCS |
5915 | 48 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
49 #ifdef INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
50 #include "services/memTracker.hpp" |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
51 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
52 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
53 #include "compiler/compileBroker.hpp" |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
54 #include "runtime/compilationPolicy.hpp" |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
55 |
5915 | 56 bool WhiteBox::_used = false; |
57 | |
58 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) | |
59 return (jlong)(void*)JNIHandles::resolve(obj); | |
60 WB_END | |
61 | |
62 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o)) | |
63 return heapOopSize; | |
64 WB_END | |
65 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
66 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
67 class WBIsKlassAliveClosure : public KlassClosure { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
68 Symbol* _name; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
69 bool _found; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
70 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
71 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {} |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
72 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
73 void do_klass(Klass* k) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
74 if (_found) return; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
75 Symbol* ksym = k->name(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
76 if (ksym->fast_compare(_name) == 0) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
77 _found = true; |
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 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
80 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
81 bool found() const { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
82 return _found; |
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 }; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
85 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
86 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
|
87 Handle h_name = JNIHandles::resolve(name); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
88 if (h_name.is_null()) return false; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
89 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
|
90 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
|
91 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
92 WBIsKlassAliveClosure closure(sym); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
93 ClassLoaderDataGraph::classes_do(&closure); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
94 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
95 return closure.found(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
96 WB_END |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
97 |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
98 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) { |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
99 return (jlong)Arguments::max_heap_for_compressed_oops(); |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
100 } |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
101 WB_END |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
102 |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
103 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
104 CollectorPolicy * p = Universe::heap()->collector_policy(); |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 p->min_alignment(), p->max_alignment()); |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
109 } |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
110 WB_END |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
111 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
112 #if INCLUDE_ALL_GCS |
5915 | 113 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj)) |
114 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
115 oop result = JNIHandles::resolve(obj); | |
116 const HeapRegion* hr = g1->heap_region_containing(result); | |
117 return hr->isHumongous(); | |
118 WB_END | |
119 | |
120 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o)) | |
121 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
122 size_t nr = g1->free_regions(); | |
123 return (jlong)nr; | |
124 WB_END | |
125 | |
126 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o)) | |
127 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
128 ConcurrentMark* cm = g1->concurrent_mark(); | |
129 return cm->concurrent_marking_in_progress(); | |
130 WB_END | |
131 | |
132 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o)) | |
133 return (jint)HeapRegion::GrainBytes; | |
134 WB_END | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
135 #endif // INCLUDE_ALL_GCS |
5915 | 136 |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
137 #if INCLUDE_NMT |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
138 // 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
|
139 // NMT picks it up correctly |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
140 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
|
141 jlong addr = 0; |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
142 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
143 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) { |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
144 addr = (jlong)(uintptr_t)os::malloc(size, mtTest); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
145 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
146 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
147 return addr; |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
148 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
149 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
150 // Free the memory allocated by NMTAllocTest |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
151 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
|
152 os::free((void*)(uintptr_t)mem, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
153 WB_END |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
154 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
155 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
|
156 jlong addr = 0; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
157 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
158 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) { |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
159 addr = (jlong)(uintptr_t)os::reserve_memory(size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
160 MemTracker::record_virtual_memory_type((address)addr, mtTest); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
161 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
162 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
163 return addr; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
164 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
165 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
166 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
167 WB_ENTRY(void, WB_NMTCommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size)) |
10969
a837fa3d3f86
8013057: assert(_needs_gc || SafepointSynchronize::is_at_safepoint()) failed: only read at safepoint
dcubed
parents:
10341
diff
changeset
|
168 os::commit_memory((char *)(uintptr_t)addr, size, !ExecMem); |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
169 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
170 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
171 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
172 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
|
173 os::uncommit_memory((char *)(uintptr_t)addr, size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
174 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
175 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
176 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
|
177 os::release_memory((char *)(uintptr_t)addr, size); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
178 WB_END |
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 // 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
|
181 WB_ENTRY(jboolean, WB_NMTWaitForDataMerge(JNIEnv* env)) |
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 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
184 return false; |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
185 } |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
186 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
187 return MemTracker::wbtest_wait_for_data_merge(); |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
188 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
189 |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
190 WB_ENTRY(jboolean, WB_NMTIsDetailSupported(JNIEnv* env)) |
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
191 return MemTracker::tracking_level() == MemTracker::NMT_detail; |
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
192 WB_END |
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
193 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
194 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
195 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
196 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
|
197 assert(method != NULL, "method should not be null"); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
198 ThreadToNativeFromVM ttn(thread); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
199 return env->FromReflectedMethod(method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
200 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
201 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
202 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
203 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
204 CodeCache::mark_all_nmethods_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
205 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
206 VMThread::execute(&op); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
207 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
208 |
12073 | 209 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
210 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
211 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
212 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
213 int result = 0; |
12073 | 214 nmethod* code; |
215 if (is_osr) { | |
216 int bci = InvocationEntryBci; | |
217 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { | |
218 code->mark_for_deoptimization(); | |
219 ++result; | |
220 bci = code->osr_entry_bci() + 1; | |
221 } | |
222 } else { | |
223 code = mh->code(); | |
224 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
225 if (code != NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
226 code->mark_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
227 ++result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
228 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
229 result += CodeCache::mark_for_deoptimization(mh()); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
230 if (result > 0) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
231 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
232 VMThread::execute(&op); |
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 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
235 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
236 |
12073 | 237 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
238 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
239 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
240 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 241 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
242 if (code == NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
243 return JNI_FALSE; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
244 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
245 return (code->is_alive() && !code->is_marked_for_deoptimization()); |
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 |
12073 | 248 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
249 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
250 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
251 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 252 if (is_osr) { |
253 return CompilationPolicy::can_be_osr_compiled(mh, comp_level); | |
254 } else { | |
255 return CompilationPolicy::can_be_compiled(mh, comp_level); | |
256 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
257 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
258 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
259 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
|
260 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
261 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
262 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
263 return mh->queued_for_compilation(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
264 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
265 |
12073 | 266 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
267 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
268 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 269 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
270 return (code != NULL ? code->comp_level() : CompLevel_none); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
271 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
272 |
12073 | 273 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
274 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
275 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 276 if (is_osr) { |
277 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); | |
278 } else { | |
279 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); | |
280 } | |
281 WB_END | |
282 | |
283 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) | |
284 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
285 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
286 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); | |
287 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci); | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
288 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
289 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
290 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
|
291 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
292 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
293 bool result = mh->dont_inline(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
294 mh->set_dont_inline(value == JNI_TRUE); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
295 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
296 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
297 |
12073 | 298 WB_ENTRY(jint, WB_GetCompileQueueSize(JNIEnv* env, jobject o, jint comp_level)) |
299 if (comp_level == CompLevel_any) { | |
300 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + | |
301 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; | |
302 } else { | |
303 return CompileBroker::queue_size(comp_level); | |
304 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
305 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
306 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
307 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
|
308 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
309 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
310 bool result = mh->force_inline(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
311 mh->set_force_inline(value == JNI_TRUE); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
312 return result; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
313 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
314 |
12073 | 315 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci)) |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
316 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
317 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 318 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
319 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
320 return (mh->queued_for_compilation() || nm != NULL); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
321 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
322 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
323 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
|
324 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
325 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
326 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
327 MethodData* mdo = mh->method_data(); |
10107 | 328 MethodCounters* mcs = mh->method_counters(); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
329 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
330 if (mdo != NULL) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
331 mdo->init(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
332 ResourceMark rm; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
333 int arg_count = mdo->method()->size_of_parameters(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
334 for (int i = 0; i < arg_count; i++) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
335 mdo->set_arg_modified(i, 0); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
336 } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
337 } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
338 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
339 mh->clear_not_c1_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
340 mh->clear_not_c2_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
341 mh->clear_not_c2_osr_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
342 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); |
10107 | 343 if (mcs != NULL) { |
344 mcs->backedge_counter()->init(); | |
345 mcs->invocation_counter()->init(); | |
346 mcs->set_interpreter_invocation_count(0); | |
347 mcs->set_interpreter_throwout_count(0); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
348 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
349 #ifdef TIERED |
10107 | 350 mcs->set_rate(0.0F); |
351 mh->set_prev_event_count(0, THREAD); | |
352 mh->set_prev_time(0, THREAD); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
353 #endif |
10107 | 354 } |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
355 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
356 |
8850 | 357 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) |
358 ResourceMark rm(THREAD); | |
359 int len; | |
10155
f258c5828eb8
8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents:
10116
diff
changeset
|
360 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
|
361 return (StringTable::lookup(name, len) != NULL); |
8850 | 362 WB_END |
363 | |
364 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) | |
365 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); | |
366 Universe::heap()->collect(GCCause::_last_ditch_collection); | |
367 WB_END | |
368 | |
10157 | 369 |
10341
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
370 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o)) |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
371 // static+volatile in order to force the read to happen |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
372 // (not be eliminated by the compiler) |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
373 static char c; |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
374 static volatile char* p; |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
375 |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
376 p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0); |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
377 if (p == NULL) { |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
378 THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory"); |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
379 } |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
380 |
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
381 c = *p; |
10157 | 382 WB_END |
383 | |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
384 //Some convenience methods to deal with objects from java |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
385 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
|
386 Symbol* signature_symbol) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
387 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
|
388 Thread* THREAD = Thread::current(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
389 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
390 //Get the class of our object |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
391 Klass* arg_klass = object->klass(); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
392 //Turn it into an instance-klass |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
393 InstanceKlass* ik = InstanceKlass::cast(arg_klass); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
394 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
395 //Create symbols to look for in the class |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
396 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
|
397 THREAD); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
398 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
399 //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
|
400 fieldDescriptor fd; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
401 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
402 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
|
403 if (res == NULL) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
404 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
|
405 name_symbol->as_C_string()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
406 fatal("Invalid layout of preloaded class"); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
407 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
408 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
409 //fetch the field at the offset we've found |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
410 int dest_offset = fd.offset(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
411 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
412 return dest_offset; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
413 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
414 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
415 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
416 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
|
417 int offset = offset_for_field(field_name, object, |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
418 vmSymbols::string_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
419 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
|
420 if (string == NULL) { |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
421 return NULL; |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
422 } |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
423 const char* ret = java_lang_String::as_utf8_string(string); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
424 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
425 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
426 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
427 bool WhiteBox::lookup_bool(const char* field_name, oop object) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
428 int offset = |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
429 offset_for_field(field_name, object, vmSymbols::bool_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
430 bool ret = (object->bool_field(offset) == JNI_TRUE); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
431 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
432 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
433 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
434 |
5915 | 435 #define CC (char*) |
436 | |
437 static JNINativeMethod methods[] = { | |
438 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress }, | |
439 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize }, | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
440 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive }, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
441 {CC"parseCommandLine", |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
442 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
|
443 (void*) &WB_ParseCommandLine |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
444 }, |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
445 {CC"getCompressedOopsMaxHeapSize", CC"()J", |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
446 (void*)&WB_GetCompressedOopsMaxHeapSize}, |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
447 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes }, |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
448 #if INCLUDE_ALL_GCS |
5915 | 449 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, |
450 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous }, | |
451 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions }, | |
452 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize }, | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
453 #endif // INCLUDE_ALL_GCS |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
454 #if INCLUDE_NMT |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
455 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
456 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
457 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
458 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
459 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
460 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
461 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge}, |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
462 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
463 #endif // INCLUDE_NMT |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
464 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
12073 | 465 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
466 (void*)&WB_DeoptimizeMethod }, |
12073 | 467 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
468 (void*)&WB_IsMethodCompiled }, |
12073 | 469 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;IZ)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
470 (void*)&WB_IsMethodCompilable}, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
471 {CC"isMethodQueuedForCompilation", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
472 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation}, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
473 {CC"makeMethodNotCompilable", |
12073 | 474 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
475 {CC"testSetDontInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
476 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
|
477 {CC"getMethodCompilationLevel", |
12073 | 478 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel}, |
479 {CC"getMethodEntryBci", | |
480 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci}, | |
481 {CC"getCompileQueueSize", | |
482 CC"(I)I", (void*)&WB_GetCompileQueueSize}, | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
483 {CC"testSetForceInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
484 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
|
485 {CC"enqueueMethodForCompilation", |
12073 | 486 CC"(Ljava/lang/reflect/Executable;II)Z", (void*)&WB_EnqueueMethodForCompilation}, |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
487 {CC"clearMethodState", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
488 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, |
8850 | 489 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, |
490 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, | |
10341
f54c85acc043
8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents:
10241
diff
changeset
|
491 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, |
5915 | 492 }; |
493 | |
494 #undef CC | |
495 | |
496 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) | |
497 { | |
498 if (WhiteBoxAPI) { | |
499 // Make sure that wbclass is loaded by the null classloader | |
500 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass()); | |
501 Handle loader(ikh->class_loader()); | |
502 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
|
503 ResourceMark rm; |
5915 | 504 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
|
505 bool result = true; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
506 // 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
|
507 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
|
508 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
|
509 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
|
510 result = false; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
511 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
|
512 // 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
|
513 // ignoring the exception |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
514 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
|
515 env->ExceptionClear(); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
516 } else { |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
517 // 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
|
518 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
|
519 env->UnregisterNatives(wbclass); |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
520 break; |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
521 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
522 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
523 } |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
524 |
dc7db03f5aa2
8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents:
10116
diff
changeset
|
525 if (result) { |
5915 | 526 WhiteBox::set_used(); |
527 } | |
528 } | |
529 } | |
530 } | |
531 JVM_END |