Mercurial > hg > truffle
annotate src/share/vm/prims/whitebox.cpp @ 20543:e7d0505c8a30
8059758: Footprint regressions with JDK-8038423
Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything.
Reviewed-by: jwilhelm, brutisso
author | tschatzl |
---|---|
date | Fri, 10 Oct 2014 15:51:58 +0200 |
parents | b509b7ff561c |
children | 417e3b8d04c5 |
rev | line source |
---|---|
5915 | 1 /* |
17817 | 2 * Copyright (c) 2012, 2014, 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 | |
20278
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
27 #include "memory/metadataFactory.hpp" |
5915 | 28 #include "memory/universe.hpp" |
29 #include "oops/oop.inline.hpp" | |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
30 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
31 #include "classfile/symbolTable.hpp" |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
32 #include "classfile/classLoaderData.hpp" |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
33 |
5915 | 34 #include "prims/whitebox.hpp" |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
35 #include "prims/wbtestmethods/parserTests.hpp" |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
36 |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
37 #include "runtime/arguments.hpp" |
5915 | 38 #include "runtime/interfaceSupport.hpp" |
39 #include "runtime/os.hpp" | |
20278
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
40 #include "utilities/array.hpp" |
5915 | 41 #include "utilities/debug.hpp" |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
42 #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
|
43 #include "utilities/exceptions.hpp" |
5915 | 44 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
45 #if INCLUDE_ALL_GCS |
20357
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
46 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" |
5915 | 47 #include "gc_implementation/g1/concurrentMark.hpp" |
48 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" | |
49 #include "gc_implementation/g1/heapRegionRemSet.hpp" | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
50 #endif // INCLUDE_ALL_GCS |
5915 | 51 |
20360 | 52 #if INCLUDE_NMT |
53 #include "services/mallocSiteTable.hpp" | |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
54 #include "services/memTracker.hpp" |
20360 | 55 #include "utilities/nativeCallStack.hpp" |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
56 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
57 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
58 #include "compiler/compileBroker.hpp" |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
59 #include "runtime/compilationPolicy.hpp" |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
60 |
17937
78bbf4d43a14
8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents:
17867
diff
changeset
|
61 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC |
78bbf4d43a14
8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents:
17867
diff
changeset
|
62 |
13053
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
63 #define SIZE_T_MAX_VALUE ((size_t) -1) |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
64 |
5915 | 65 bool WhiteBox::_used = false; |
66 | |
67 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) | |
68 return (jlong)(void*)JNIHandles::resolve(obj); | |
69 WB_END | |
70 | |
71 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o)) | |
72 return heapOopSize; | |
73 WB_END | |
74 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
75 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
76 class WBIsKlassAliveClosure : public KlassClosure { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
77 Symbol* _name; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
78 bool _found; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
79 public: |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
80 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {} |
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 void do_klass(Klass* k) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
83 if (_found) return; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
84 Symbol* ksym = k->name(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
85 if (ksym->fast_compare(_name) == 0) { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
86 _found = true; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
87 } |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
88 } |
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 bool found() const { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
91 return _found; |
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 }; |
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 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
|
96 Handle h_name = JNIHandles::resolve(name); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
97 if (h_name.is_null()) return false; |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
98 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
|
99 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
|
100 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
101 WBIsKlassAliveClosure closure(sym); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
102 ClassLoaderDataGraph::classes_do(&closure); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
103 |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
104 return closure.found(); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
105 WB_END |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
106 |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
107 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
|
108 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
|
109 } |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
110 WB_END |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
111 |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
112 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
113 CollectorPolicy * p = Universe::heap()->collector_policy(); |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
114 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
|
115 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
|
116 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), |
13060
8f07aa079343
8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents:
12233
diff
changeset
|
117 p->space_alignment(), p->heap_alignment()); |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
118 } |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
119 WB_END |
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
120 |
13053
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
121 #ifndef PRODUCT |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
122 // Forward declaration |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
123 void TestReservedSpace_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
124 void TestReserveMemorySpecial_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
125 void TestVirtualSpace_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
126 void TestMetaspaceAux_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
127 #endif |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
128 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
129 WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o)) |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
130 #ifndef PRODUCT |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
131 TestReservedSpace_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
132 TestReserveMemorySpecial_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
133 TestVirtualSpace_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
134 TestMetaspaceAux_test(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
135 #endif |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
136 WB_END |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
137 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
138 WB_ENTRY(void, WB_ReadFromNoaccessArea(JNIEnv* env, jobject o)) |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
139 size_t granularity = os::vm_allocation_granularity(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
140 ReservedHeapSpace rhs(100 * granularity, granularity, false, NULL); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
141 VirtualSpace vs; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
142 vs.initialize(rhs, 50 * granularity); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
143 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
144 //Check if constraints are complied |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
145 if (!( UseCompressedOops && rhs.base() != NULL && |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
146 Universe::narrow_oop_base() != NULL && |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
147 Universe::narrow_oop_use_implicit_null_checks() )) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
148 tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n " |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
149 "\tUseCompressedOops is %d\n" |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
150 "\trhs.base() is "PTR_FORMAT"\n" |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
151 "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n" |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
152 "\tUniverse::narrow_oop_use_implicit_null_checks() is %d", |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
153 UseCompressedOops, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
154 rhs.base(), |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
155 Universe::narrow_oop_base(), |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
156 Universe::narrow_oop_use_implicit_null_checks()); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
157 return; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
158 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
159 tty->print_cr("Reading from no access area... "); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
160 tty->print_cr("*(vs.low_boundary() - rhs.noaccess_prefix() / 2 ) = %c", |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
161 *(vs.low_boundary() - rhs.noaccess_prefix() / 2 )); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
162 WB_END |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
163 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
164 static jint wb_stress_virtual_space_resize(size_t reserved_space_size, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
165 size_t magnitude, size_t iterations) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
166 size_t granularity = os::vm_allocation_granularity(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
167 ReservedHeapSpace rhs(reserved_space_size * granularity, granularity, false, NULL); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
168 VirtualSpace vs; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
169 if (!vs.initialize(rhs, 0)) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
170 tty->print_cr("Failed to initialize VirtualSpace. Can't proceed."); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
171 return 3; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
172 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
173 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
174 long seed = os::random(); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
175 tty->print_cr("Random seed is %ld", seed); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
176 os::init_random(seed); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
177 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
178 for (size_t i = 0; i < iterations; i++) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
179 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
180 // Whether we will shrink or grow |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
181 bool shrink = os::random() % 2L == 0; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
182 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
183 // Get random delta to resize virtual space |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
184 size_t delta = (size_t)os::random() % magnitude; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
185 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
186 // If we are about to shrink virtual space below zero, then expand instead |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
187 if (shrink && vs.committed_size() < delta) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
188 shrink = false; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
189 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
190 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
191 // Resizing by delta |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
192 if (shrink) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
193 vs.shrink_by(delta); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
194 } else { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
195 // If expanding fails expand_by will silently return false |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
196 vs.expand_by(delta, true); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
197 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
198 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
199 return 0; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
200 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
201 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
202 WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
203 jlong reserved_space_size, jlong magnitude, jlong iterations)) |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
204 tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", " |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
205 "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
206 iterations); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
207 if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
208 tty->print_cr("One of variables printed above is negative. Can't proceed.\n"); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
209 return 1; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
210 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
211 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
212 // sizeof(size_t) depends on whether OS is 32bit or 64bit. sizeof(jlong) is |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
213 // always 8 byte. That's why we should avoid overflow in case of 32bit platform. |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
214 if (sizeof(size_t) < sizeof(jlong)) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
215 jlong size_t_max_value = (jlong) SIZE_T_MAX_VALUE; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
216 if (reserved_space_size > size_t_max_value || magnitude > size_t_max_value |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
217 || iterations > size_t_max_value) { |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
218 tty->print_cr("One of variables printed above overflows size_t. Can't proceed.\n"); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
219 return 2; |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
220 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
221 } |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
222 |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
223 return wb_stress_virtual_space_resize((size_t) reserved_space_size, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
224 (size_t) magnitude, (size_t) iterations); |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
225 WB_END |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
226 |
20357
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
227 WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj)) |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
228 oop p = JNIHandles::resolve(obj); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
229 #if INCLUDE_ALL_GCS |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
230 if (UseG1GC) { |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
231 G1CollectedHeap* g1 = G1CollectedHeap::heap(); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
232 const HeapRegion* hr = g1->heap_region_containing(p); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
233 if (hr == NULL) { |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
234 return false; |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
235 } |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
236 return !(hr->is_young()); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
237 } else if (UseParallelGC) { |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
238 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap(); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
239 return !psh->is_in_young(p); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
240 } |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
241 #endif // INCLUDE_ALL_GCS |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
242 GenCollectedHeap* gch = GenCollectedHeap::heap(); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
243 return !gch->is_in_young(p); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
244 WB_END |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
245 |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
246 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj)) |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
247 oop p = JNIHandles::resolve(obj); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
248 return p->size() * HeapWordSize; |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
249 WB_END |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
250 |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
251 #if INCLUDE_ALL_GCS |
5915 | 252 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj)) |
253 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
254 oop result = JNIHandles::resolve(obj); | |
255 const HeapRegion* hr = g1->heap_region_containing(result); | |
256 return hr->isHumongous(); | |
257 WB_END | |
258 | |
259 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o)) | |
260 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
20336
6701abbc4441
8054818: Refactor HeapRegionSeq to manage heap region and auxiliary data
tschatzl
parents:
20278
diff
changeset
|
261 size_t nr = g1->num_free_regions(); |
5915 | 262 return (jlong)nr; |
263 WB_END | |
264 | |
265 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o)) | |
266 G1CollectedHeap* g1 = G1CollectedHeap::heap(); | |
267 ConcurrentMark* cm = g1->concurrent_mark(); | |
268 return cm->concurrent_marking_in_progress(); | |
269 WB_END | |
270 | |
271 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o)) | |
272 return (jint)HeapRegion::GrainBytes; | |
273 WB_END | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
274 #endif // INCLUDE_ALL_GCS |
5915 | 275 |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
276 #if INCLUDE_NMT |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
277 // 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
|
278 // NMT picks it up correctly |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
279 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
|
280 jlong addr = 0; |
20360 | 281 addr = (jlong)(uintptr_t)os::malloc(size, mtTest); |
282 return addr; | |
283 WB_END | |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
284 |
20360 | 285 // Alloc memory with pseudo call stack. The test can create psudo malloc |
286 // allocation site to stress the malloc tracking. | |
287 WB_ENTRY(jlong, WB_NMTMallocWithPseudoStack(JNIEnv* env, jobject o, jlong size, jint pseudo_stack)) | |
288 address pc = (address)(size_t)pseudo_stack; | |
289 NativeCallStack stack(&pc, 1); | |
290 return (jlong)os::malloc(size, mtTest, stack); | |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
291 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
292 |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
293 // Free the memory allocated by NMTAllocTest |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
294 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
|
295 os::free((void*)(uintptr_t)mem, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
296 WB_END |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
297 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
298 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
|
299 jlong addr = 0; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
300 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
301 addr = (jlong)(uintptr_t)os::reserve_memory(size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
302 MemTracker::record_virtual_memory_type((address)addr, mtTest); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
303 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
304 return addr; |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
305 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
306 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
307 |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
308 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
|
309 os::commit_memory((char *)(uintptr_t)addr, size, !ExecMem); |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
310 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
311 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
312 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
313 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
|
314 os::uncommit_memory((char *)(uintptr_t)addr, size); |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
315 WB_END |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
316 |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
317 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
|
318 os::release_memory((char *)(uintptr_t)addr, size); |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
319 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
320 |
20360 | 321 WB_ENTRY(jboolean, WB_NMTIsDetailSupported(JNIEnv* env)) |
322 return MemTracker::tracking_level() == NMT_detail; | |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
323 WB_END |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
324 |
20360 | 325 WB_ENTRY(void, WB_NMTOverflowHashBucket(JNIEnv* env, jobject o, jlong num)) |
326 address pc = (address)1; | |
327 for (jlong index = 0; index < num; index ++) { | |
328 NativeCallStack stack(&pc, 1); | |
329 os::malloc(0, mtTest, stack); | |
330 pc += MallocSiteTable::hash_buckets(); | |
331 } | |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
332 WB_END |
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
333 |
20360 | 334 |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
335 #endif // INCLUDE_NMT |
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
336 |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
337 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
|
338 assert(method != NULL, "method should not be null"); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
339 ThreadToNativeFromVM ttn(thread); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
340 return env->FromReflectedMethod(method); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
341 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
342 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
343 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
344 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
345 CodeCache::mark_all_nmethods_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
346 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
347 VMThread::execute(&op); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
348 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
349 |
12073 | 350 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
|
351 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
352 int result = 0; |
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
353 CHECK_JNI_EXCEPTION_(env, result); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
354 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
355 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 356 nmethod* code; |
357 if (is_osr) { | |
358 int bci = InvocationEntryBci; | |
359 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { | |
360 code->mark_for_deoptimization(); | |
361 ++result; | |
362 bci = code->osr_entry_bci() + 1; | |
363 } | |
364 } else { | |
365 code = mh->code(); | |
366 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
367 if (code != NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
368 code->mark_for_deoptimization(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
369 ++result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
370 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
371 result += CodeCache::mark_for_deoptimization(mh()); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
372 if (result > 0) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
373 VM_Deoptimize op; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
374 VMThread::execute(&op); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
375 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
376 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
377 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
378 |
12073 | 379 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
|
380 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
381 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
382 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
383 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 384 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
|
385 if (code == NULL) { |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
386 return JNI_FALSE; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
387 } |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
388 return (code->is_alive() && !code->is_marked_for_deoptimization()); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
389 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
390 |
12073 | 391 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
|
392 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
393 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
394 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
395 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 396 if (is_osr) { |
397 return CompilationPolicy::can_be_osr_compiled(mh, comp_level); | |
398 } else { | |
399 return CompilationPolicy::can_be_compiled(mh, comp_level); | |
400 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
401 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
402 |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
403 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
|
404 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
405 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
406 MutexLockerEx mu(Compile_lock); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
407 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
408 return mh->queued_for_compilation(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
409 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
410 |
12073 | 411 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
|
412 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
413 CHECK_JNI_EXCEPTION_(env, CompLevel_none); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
414 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 415 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
|
416 return (code != NULL ? code->comp_level() : CompLevel_none); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
417 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
418 |
12073 | 419 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
|
420 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
421 CHECK_JNI_EXCEPTION(env); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
422 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 423 if (is_osr) { |
424 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); | |
425 } else { | |
426 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); | |
427 } | |
428 WB_END | |
429 | |
430 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) | |
431 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
432 CHECK_JNI_EXCEPTION_(env, InvocationEntryBci); |
12073 | 433 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
434 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); | |
435 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
|
436 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
437 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
438 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
|
439 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
440 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
441 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
442 bool result = mh->dont_inline(); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
443 mh->set_dont_inline(value == JNI_TRUE); |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
444 return result; |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
445 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
446 |
12073 | 447 WB_ENTRY(jint, WB_GetCompileQueueSize(JNIEnv* env, jobject o, jint comp_level)) |
448 if (comp_level == CompLevel_any) { | |
449 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ + | |
450 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */; | |
451 } else { | |
452 return CompileBroker::queue_size(comp_level); | |
453 } | |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
454 WB_END |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
455 |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
456 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
|
457 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
458 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
459 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
460 bool result = mh->force_inline(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
461 mh->set_force_inline(value == JNI_TRUE); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
462 return result; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
463 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
464 |
12073 | 465 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
|
466 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
467 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
468 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
12073 | 469 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
|
470 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
471 return (mh->queued_for_compilation() || nm != NULL); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
472 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
473 |
17867 | 474 class VM_WhiteBoxOperation : public VM_Operation { |
475 public: | |
476 VM_WhiteBoxOperation() { } | |
477 VMOp_Type type() const { return VMOp_WhiteBoxOperation; } | |
478 bool allow_nested_vm_operations() const { return true; } | |
479 }; | |
480 | |
481 class AlwaysFalseClosure : public BoolObjectClosure { | |
482 public: | |
483 bool do_object_b(oop p) { return false; } | |
484 }; | |
485 | |
486 static AlwaysFalseClosure always_false; | |
487 | |
488 class VM_WhiteBoxCleanMethodData : public VM_WhiteBoxOperation { | |
489 public: | |
490 VM_WhiteBoxCleanMethodData(MethodData* mdo) : _mdo(mdo) { } | |
491 void doit() { | |
492 _mdo->clean_method_data(&always_false); | |
493 } | |
494 private: | |
495 MethodData* _mdo; | |
496 }; | |
497 | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
498 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
|
499 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
17704
56cd09c4a5c9
8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents:
13070
diff
changeset
|
500 CHECK_JNI_EXCEPTION(env); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
501 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
502 MutexLockerEx mu(Compile_lock); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
503 MethodData* mdo = mh->method_data(); |
10107 | 504 MethodCounters* mcs = mh->method_counters(); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
505 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
506 if (mdo != NULL) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
507 mdo->init(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
508 ResourceMark rm; |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
509 int arg_count = mdo->method()->size_of_parameters(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
510 for (int i = 0; i < arg_count; i++) { |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
511 mdo->set_arg_modified(i, 0); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
512 } |
17867 | 513 VM_WhiteBoxCleanMethodData op(mdo); |
514 VMThread::execute(&op); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
515 } |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
516 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
517 mh->clear_not_c1_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
518 mh->clear_not_c2_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
519 mh->clear_not_c2_osr_compilable(); |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
520 NOT_PRODUCT(mh->set_compiled_invocation_count(0)); |
10107 | 521 if (mcs != NULL) { |
522 mcs->backedge_counter()->init(); | |
523 mcs->invocation_counter()->init(); | |
524 mcs->set_interpreter_invocation_count(0); | |
525 mcs->set_interpreter_throwout_count(0); | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
526 |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
527 #ifdef TIERED |
10107 | 528 mcs->set_rate(0.0F); |
20465
7301840ea20e
8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents:
20451
diff
changeset
|
529 mh->set_prev_event_count(0); |
7301840ea20e
8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents:
20451
diff
changeset
|
530 mh->set_prev_time(0); |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
531 #endif |
10107 | 532 } |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
533 WB_END |
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
534 |
20249 | 535 template <typename T> |
536 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAt)(const char*, T*)) { | |
537 if (name == NULL) { | |
538 return false; | |
539 } | |
540 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
541 const char* flag_name = env->GetStringUTFChars(name, NULL); | |
542 bool result = (*TAt)(flag_name, value); | |
543 env->ReleaseStringUTFChars(name, flag_name); | |
544 return result; | |
545 } | |
546 | |
547 template <typename T> | |
548 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAtPut)(const char*, T*, Flag::Flags)) { | |
549 if (name == NULL) { | |
550 return false; | |
551 } | |
552 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
553 const char* flag_name = env->GetStringUTFChars(name, NULL); | |
554 bool result = (*TAtPut)(flag_name, value, Flag::INTERNAL); | |
555 env->ReleaseStringUTFChars(name, flag_name); | |
556 return result; | |
557 } | |
558 | |
559 template <typename T> | |
560 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) { | |
561 ResourceMark rm(thread); | |
562 jclass clazz = env->FindClass(name->as_C_string()); | |
563 CHECK_JNI_EXCEPTION_(env, NULL); | |
564 jmethodID methodID = env->GetStaticMethodID(clazz, | |
565 vmSymbols::valueOf_name()->as_C_string(), | |
566 sig->as_C_string()); | |
567 CHECK_JNI_EXCEPTION_(env, NULL); | |
568 jobject result = env->CallStaticObjectMethod(clazz, methodID, value); | |
569 CHECK_JNI_EXCEPTION_(env, NULL); | |
570 return result; | |
571 } | |
572 | |
573 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) { | |
574 return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value); | |
575 } | |
576 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) { | |
577 return box(thread, env, vmSymbols::java_lang_Integer(), vmSymbols::Integer_valueOf_signature(), value); | |
578 } | |
579 static jobject longBox(JavaThread* thread, JNIEnv* env, jlong value) { | |
580 return box(thread, env, vmSymbols::java_lang_Long(), vmSymbols::Long_valueOf_signature(), value); | |
581 } | |
582 /* static jobject floatBox(JavaThread* thread, JNIEnv* env, jfloat value) { | |
583 return box(thread, env, vmSymbols::java_lang_Float(), vmSymbols::Float_valueOf_signature(), value); | |
584 }*/ | |
585 static jobject doubleBox(JavaThread* thread, JNIEnv* env, jdouble value) { | |
586 return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value); | |
587 } | |
588 | |
589 WB_ENTRY(jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name)) | |
590 bool result; | |
591 if (GetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAt)) { | |
592 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
593 return booleanBox(thread, env, result); | |
594 } | |
595 return NULL; | |
596 WB_END | |
597 | |
598 WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name)) | |
599 intx result; | |
600 if (GetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAt)) { | |
601 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
602 return longBox(thread, env, result); | |
603 } | |
604 return NULL; | |
605 WB_END | |
606 | |
607 WB_ENTRY(jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name)) | |
608 uintx result; | |
609 if (GetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAt)) { | |
610 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
611 return longBox(thread, env, result); | |
612 } | |
613 return NULL; | |
614 WB_END | |
615 | |
616 WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name)) | |
617 uint64_t result; | |
618 if (GetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAt)) { | |
619 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
620 return longBox(thread, env, result); | |
621 } | |
622 return NULL; | |
623 WB_END | |
624 | |
625 WB_ENTRY(jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name)) | |
626 double result; | |
627 if (GetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAt)) { | |
628 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
629 return doubleBox(thread, env, result); | |
630 } | |
631 return NULL; | |
632 WB_END | |
633 | |
634 WB_ENTRY(jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name)) | |
635 ccstr ccstrResult; | |
636 if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAt)) { | |
637 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
638 jstring result = env->NewStringUTF(ccstrResult); | |
639 CHECK_JNI_EXCEPTION_(env, NULL); | |
640 return result; | |
641 } | |
642 return NULL; | |
643 WB_END | |
644 | |
645 WB_ENTRY(void, WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value)) | |
646 bool result = value == JNI_TRUE ? true : false; | |
647 SetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAtPut); | |
648 WB_END | |
649 | |
650 WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) | |
651 intx result = value; | |
652 SetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAtPut); | |
653 WB_END | |
654 | |
655 WB_ENTRY(void, WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) | |
656 uintx result = value; | |
657 SetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAtPut); | |
658 WB_END | |
659 | |
660 WB_ENTRY(void, WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value)) | |
661 uint64_t result = value; | |
662 SetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAtPut); | |
663 WB_END | |
664 | |
665 WB_ENTRY(void, WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value)) | |
666 double result = value; | |
667 SetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAtPut); | |
668 WB_END | |
669 | |
670 WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value)) | |
671 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
672 const char* ccstrValue = (value == NULL) ? NULL : env->GetStringUTFChars(value, NULL); | |
673 ccstr ccstrResult = ccstrValue; | |
674 bool needFree; | |
675 { | |
676 ThreadInVMfromNative ttvfn(thread); // back to VM | |
677 needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAtPut); | |
678 } | |
679 if (value != NULL) { | |
680 env->ReleaseStringUTFChars(value, ccstrValue); | |
681 } | |
682 if (needFree) { | |
683 FREE_C_HEAP_ARRAY(char, ccstrResult, mtInternal); | |
684 } | |
685 WB_END | |
686 | |
687 | |
8850 | 688 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) |
689 ResourceMark rm(THREAD); | |
690 int len; | |
10155
f258c5828eb8
8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents:
10116
diff
changeset
|
691 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
|
692 return (StringTable::lookup(name, len) != NULL); |
8850 | 693 WB_END |
694 | |
695 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o)) | |
696 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true); | |
697 Universe::heap()->collect(GCCause::_last_ditch_collection); | |
20451 | 698 #if INCLUDE_ALL_GCS |
699 if (UseG1GC) { | |
700 // Needs to be cleared explicitly for G1 | |
701 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(false); | |
702 } | |
703 #endif // INCLUDE_ALL_GCS | |
8850 | 704 WB_END |
705 | |
20357
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
706 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o)) |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
707 Universe::heap()->collect(GCCause::_wb_young_gc); |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
708 WB_END |
10157 | 709 |
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
|
710 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
|
711 // 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
|
712 // (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
|
713 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
|
714 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
|
715 |
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
|
716 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
|
717 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
|
718 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
|
719 } |
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
|
720 |
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
|
721 c = *p; |
10157 | 722 WB_END |
723 | |
17778
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
724 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o)) |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
725 const char* cpu_features = VM_Version::cpu_features(); |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
726 ThreadToNativeFromVM ttn(thread); |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
727 jstring features_string = env->NewStringUTF(cpu_features); |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
728 |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
729 CHECK_JNI_EXCEPTION_(env, NULL); |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
730 |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
731 return features_string; |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
732 WB_END |
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
733 |
17817 | 734 |
735 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) | |
736 ResourceMark rm(THREAD); | |
737 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | |
738 CHECK_JNI_EXCEPTION_(env, NULL); | |
739 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
740 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); | |
741 jobjectArray result = NULL; | |
742 if (code == NULL) { | |
743 return result; | |
744 } | |
745 int insts_size = code->insts_size(); | |
746 | |
747 ThreadToNativeFromVM ttn(thread); | |
748 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string()); | |
749 CHECK_JNI_EXCEPTION_(env, NULL); | |
750 result = env->NewObjectArray(2, clazz, NULL); | |
751 if (result == NULL) { | |
752 return result; | |
753 } | |
754 | |
20249 | 755 jobject obj = integerBox(thread, env, code->comp_level()); |
17817 | 756 CHECK_JNI_EXCEPTION_(env, NULL); |
757 env->SetObjectArrayElement(result, 0, obj); | |
758 | |
759 jbyteArray insts = env->NewByteArray(insts_size); | |
760 CHECK_JNI_EXCEPTION_(env, NULL); | |
761 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin()); | |
762 env->SetObjectArrayElement(result, 1, insts); | |
763 | |
764 return result; | |
765 WB_END | |
766 | |
767 | |
20278
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
768 int WhiteBox::array_bytes_to_length(size_t bytes) { |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
769 return Array<u1>::bytes_to_length(bytes); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
770 } |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
771 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
772 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
773 if (size < 0) { |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
774 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
775 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
776 } |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
777 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
778 oop class_loader_oop = JNIHandles::resolve(class_loader); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
779 ClassLoaderData* cld = class_loader_oop != NULL |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
780 ? java_lang_ClassLoader::loader_data(class_loader_oop) |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
781 : ClassLoaderData::the_null_class_loader_data(); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
782 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
783 void* metadata = MetadataFactory::new_writeable_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
784 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
785 return (jlong)(uintptr_t)metadata; |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
786 WB_END |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
787 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
788 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size)) |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
789 oop class_loader_oop = JNIHandles::resolve(class_loader); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
790 ClassLoaderData* cld = class_loader_oop != NULL |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
791 ? java_lang_ClassLoader::loader_data(class_loader_oop) |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
792 : ClassLoaderData::the_null_class_loader_data(); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
793 |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
794 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr); |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
795 WB_END |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
796 |
20540
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
797 WB_ENTRY(jlong, WB_IncMetaspaceCapacityUntilGC(JNIEnv* env, jobject wb, jlong inc)) |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
798 if (inc < 0) { |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
799 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
800 err_msg("WB_IncMetaspaceCapacityUntilGC: inc is negative: " JLONG_FORMAT, inc)); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
801 } |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
802 |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
803 jlong max_size_t = (jlong) ((size_t) -1); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
804 if (inc > max_size_t) { |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
805 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
806 err_msg("WB_IncMetaspaceCapacityUntilGC: inc does not fit in size_t: " JLONG_FORMAT, inc)); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
807 } |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
808 |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
809 size_t new_cap_until_GC = 0; |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
810 size_t aligned_inc = align_size_down((size_t) inc, Metaspace::commit_alignment()); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
811 bool success = MetaspaceGC::inc_capacity_until_GC(aligned_inc, &new_cap_until_GC); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
812 if (!success) { |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
813 THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(), |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
814 "WB_IncMetaspaceCapacityUntilGC: could not increase capacity until GC " |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
815 "due to contention with another thread"); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
816 } |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
817 return (jlong) new_cap_until_GC; |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
818 WB_END |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
819 |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
820 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb)) |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
821 return (jlong) MetaspaceGC::capacity_until_GC(); |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
822 WB_END |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
823 |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
824 //Some convenience methods to deal with objects from java |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
825 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
|
826 Symbol* signature_symbol) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
827 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
|
828 Thread* THREAD = Thread::current(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
829 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
830 //Get the class of our object |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
831 Klass* arg_klass = object->klass(); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
832 //Turn it into an instance-klass |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
833 InstanceKlass* ik = InstanceKlass::cast(arg_klass); |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
834 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
835 //Create symbols to look for in the class |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
836 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
|
837 THREAD); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
838 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
839 //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
|
840 fieldDescriptor fd; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
841 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6202
diff
changeset
|
842 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
|
843 if (res == NULL) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
844 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
|
845 name_symbol->as_C_string()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
846 fatal("Invalid layout of preloaded class"); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
847 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
848 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
849 //fetch the field at the offset we've found |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
850 int dest_offset = fd.offset(); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
851 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
852 return dest_offset; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
853 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
854 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
855 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
856 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
|
857 int offset = offset_for_field(field_name, object, |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
858 vmSymbols::string_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
859 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
|
860 if (string == NULL) { |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
861 return NULL; |
5a1f452f8f90
7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents:
5978
diff
changeset
|
862 } |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
863 const char* ret = java_lang_String::as_utf8_string(string); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
864 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
865 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
866 |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
867 bool WhiteBox::lookup_bool(const char* field_name, oop object) { |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
868 int offset = |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
869 offset_for_field(field_name, object, vmSymbols::bool_signature()); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
870 bool ret = (object->bool_field(offset) == JNI_TRUE); |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
871 return ret; |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
872 } |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
873 |
20451 | 874 void WhiteBox::register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread, JNINativeMethod* method_array, int method_count) { |
875 ResourceMark rm; | |
876 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | |
877 | |
878 // one by one registration natives for exception catching | |
879 jclass no_such_method_error_klass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); | |
880 CHECK_JNI_EXCEPTION(env); | |
881 for (int i = 0, n = method_count; i < n; ++i) { | |
882 // Skip dummy entries | |
883 if (method_array[i].fnPtr == NULL) continue; | |
884 if (env->RegisterNatives(wbclass, &method_array[i], 1) != 0) { | |
885 jthrowable throwable_obj = env->ExceptionOccurred(); | |
886 if (throwable_obj != NULL) { | |
887 env->ExceptionClear(); | |
888 if (env->IsInstanceOf(throwable_obj, no_such_method_error_klass)) { | |
889 // NoSuchMethodError is thrown when a method can't be found or a method is not native. | |
890 // Ignoring the exception since it is not preventing use of other WhiteBox methods. | |
891 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", | |
892 method_array[i].name, method_array[i].signature); | |
893 } | |
894 } else { | |
895 // Registration failed unexpectedly. | |
896 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", | |
897 method_array[i].name, method_array[i].signature); | |
898 env->UnregisterNatives(wbclass); | |
899 break; | |
900 } | |
901 } | |
902 } | |
903 } | |
5978
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
904 |
5915 | 905 #define CC (char*) |
906 | |
907 static JNINativeMethod methods[] = { | |
908 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress }, | |
20357
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
909 {CC"getObjectSize", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize }, |
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
910 {CC"isObjectInOldGen", CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen }, |
5915 | 911 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize }, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
912 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive }, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
913 {CC"parseCommandLine", |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
914 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
|
915 (void*) &WB_ParseCommandLine |
51612f0c0a79
7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents:
5915
diff
changeset
|
916 }, |
12233
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
917 {CC"getCompressedOopsMaxHeapSize", CC"()J", |
40136aa2cdb1
8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents:
12118
diff
changeset
|
918 (void*)&WB_GetCompressedOopsMaxHeapSize}, |
10241
d17700c82d7d
8006088: Incompatible heap size flags accepted by VM
tschatzl
parents:
10208
diff
changeset
|
919 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes }, |
13053
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
920 {CC"runMemoryUnitTests", CC"()V", (void*)&WB_RunMemoryUnitTests}, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
921 {CC"readFromNoaccessArea",CC"()V", (void*)&WB_ReadFromNoaccessArea}, |
9d8b29a0548c
8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents:
12233
diff
changeset
|
922 {CC"stressVirtualSpaceResize",CC"(JJJ)I", (void*)&WB_StressVirtualSpaceResize}, |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
923 #if INCLUDE_ALL_GCS |
5915 | 924 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, |
925 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous }, | |
926 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions }, | |
927 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize }, | |
8001
db9981fd3124
8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents:
6725
diff
changeset
|
928 #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
|
929 #if INCLUDE_NMT |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
930 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc }, |
20360 | 931 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack}, |
9056
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
932 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
933 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
934 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
935 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
3b890cd4da64
8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents:
8850
diff
changeset
|
936 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
20360 | 937 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket}, |
12118
5fd8e2fbafd4
8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents:
12073
diff
changeset
|
938 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, |
7971
4102b59539ce
8005012: Add WB APIs to better support NMT testing
ctornqvi
parents:
6725
diff
changeset
|
939 #endif // INCLUDE_NMT |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
940 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
12073 | 941 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
942 (void*)&WB_DeoptimizeMethod }, |
12073 | 943 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
944 (void*)&WB_IsMethodCompiled }, |
12073 | 945 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;IZ)Z", |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
946 (void*)&WB_IsMethodCompilable}, |
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
947 {CC"isMethodQueuedForCompilation", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
948 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation}, |
8051
12e01444ca2d
8006683: Add WhiteBox API to testing of compiler
iignatyev
parents:
8003
diff
changeset
|
949 {CC"makeMethodNotCompilable", |
12073 | 950 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
|
951 {CC"testSetDontInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
952 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
|
953 {CC"getMethodCompilationLevel", |
12073 | 954 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel}, |
955 {CC"getMethodEntryBci", | |
956 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci}, | |
957 {CC"getCompileQueueSize", | |
958 CC"(I)I", (void*)&WB_GetCompileQueueSize}, | |
9080
b84fd7d73702
8007288: Additional WB API for compiler's testing
iignatyev
parents:
8850
diff
changeset
|
959 {CC"testSetForceInlineMethod", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
960 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
|
961 {CC"enqueueMethodForCompilation", |
12073 | 962 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
|
963 {CC"clearMethodState", |
10113
4b2eebe03f93
8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents:
9085
diff
changeset
|
964 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState}, |
20249 | 965 {CC"setBooleanVMFlag", CC"(Ljava/lang/String;Z)V",(void*)&WB_SetBooleanVMFlag}, |
966 {CC"setIntxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntxVMFlag}, | |
967 {CC"setUintxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintxVMFlag}, | |
968 {CC"setUint64VMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUint64VMFlag}, | |
969 {CC"setDoubleVMFlag", CC"(Ljava/lang/String;D)V",(void*)&WB_SetDoubleVMFlag}, | |
970 {CC"setStringVMFlag", CC"(Ljava/lang/String;Ljava/lang/String;)V", | |
971 (void*)&WB_SetStringVMFlag}, | |
972 {CC"getBooleanVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Boolean;", | |
973 (void*)&WB_GetBooleanVMFlag}, | |
974 {CC"getIntxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", | |
975 (void*)&WB_GetIntxVMFlag}, | |
976 {CC"getUintxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", | |
977 (void*)&WB_GetUintxVMFlag}, | |
978 {CC"getUint64VMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;", | |
979 (void*)&WB_GetUint64VMFlag}, | |
980 {CC"getDoubleVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Double;", | |
981 (void*)&WB_GetDoubleVMFlag}, | |
982 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;", | |
983 (void*)&WB_GetStringVMFlag}, | |
984 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, | |
8850 | 985 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, |
20357
4bfc44ba0d19
8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents:
20336
diff
changeset
|
986 {CC"youngGC", CC"()V", (void*)&WB_YoungGC }, |
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
|
987 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, |
20278
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
988 {CC"allocateMetaspace", |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
989 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace }, |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
990 {CC"freeMetaspace", |
2c6ef90f030a
8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents:
20249
diff
changeset
|
991 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace }, |
20540
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
992 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC }, |
b509b7ff561c
8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents:
20465
diff
changeset
|
993 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC }, |
17778
a48e16541e6b
8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents:
17704
diff
changeset
|
994 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, |
17817 | 995 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", |
996 (void*)&WB_GetNMethod }, | |
5915 | 997 }; |
998 | |
999 #undef CC | |
1000 | |
1001 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass)) | |
1002 { | |
1003 if (WhiteBoxAPI) { | |
1004 // Make sure that wbclass is loaded by the null classloader | |
1005 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass()); | |
1006 Handle loader(ikh->class_loader()); | |
1007 if (loader.is_null()) { | |
20451 | 1008 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0])); |
1009 WhiteBox::register_extended(env, wbclass, thread); | |
1010 WhiteBox::set_used(); | |
5915 | 1011 } |
1012 } | |
1013 } | |
1014 JVM_END |