16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26
27 #include "memory/universe.hpp"
28 #include "oops/oop.inline.hpp"
29
30 #include "classfile/symbolTable.hpp"
31 #include "classfile/classLoaderData.hpp"
32
33 #include "prims/whitebox.hpp"
34 #include "prims/wbtestmethods/parserTests.hpp"
35
36 #include "runtime/interfaceSupport.hpp"
37 #include "runtime/os.hpp"
38 #include "utilities/debug.hpp"
39 #include "utilities/macros.hpp"
40
41 #if INCLUDE_ALL_GCS
42 #include "gc_implementation/g1/concurrentMark.hpp"
43 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
44 #include "gc_implementation/g1/heapRegionRemSet.hpp"
45 #endif // INCLUDE_ALL_GCS
46
47 #ifdef INCLUDE_NMT
48 #include "services/memTracker.hpp"
49 #endif // INCLUDE_NMT
50
51 #include "compiler/compileBroker.hpp"
52 #include "runtime/compilationPolicy.hpp"
53
54 bool WhiteBox::_used = false;
55
76 }
77 }
78
79 bool found() const {
80 return _found;
81 }
82 };
83
84 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
85 Handle h_name = JNIHandles::resolve(name);
86 if (h_name.is_null()) return false;
87 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
88 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
89
90 WBIsKlassAliveClosure closure(sym);
91 ClassLoaderDataGraph::classes_do(&closure);
92
93 return closure.found();
94 WB_END
95
96 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
97 CollectorPolicy * p = Universe::heap()->collector_policy();
98 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
99 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
100 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
101 p->min_alignment(), p->max_alignment());
102 }
103 WB_END
104
105 #if INCLUDE_ALL_GCS
106 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
107 G1CollectedHeap* g1 = G1CollectedHeap::heap();
108 oop result = JNIHandles::resolve(obj);
109 const HeapRegion* hr = g1->heap_region_containing(result);
110 return hr->isHumongous();
111 WB_END
112
113 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
114 G1CollectedHeap* g1 = G1CollectedHeap::heap();
115 size_t nr = g1->free_regions();
378 }
379
380 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
381 int offset =
382 offset_for_field(field_name, object, vmSymbols::bool_signature());
383 bool ret = (object->bool_field(offset) == JNI_TRUE);
384 return ret;
385 }
386
387
388 #define CC (char*)
389
390 static JNINativeMethod methods[] = {
391 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
392 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
393 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
394 {CC"parseCommandLine",
395 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
396 (void*) &WB_ParseCommandLine
397 },
398 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
399 #if INCLUDE_ALL_GCS
400 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
401 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
402 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
403 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
404 #endif // INCLUDE_ALL_GCS
405 #ifdef INCLUDE_NMT
406 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
407 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
408 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
409 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
410 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
411 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
412 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
413 #endif // INCLUDE_NMT
414 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
415 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
416 (void*)&WB_DeoptimizeMethod },
417 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26
27 #include "memory/universe.hpp"
28 #include "oops/oop.inline.hpp"
29
30 #include "classfile/symbolTable.hpp"
31 #include "classfile/classLoaderData.hpp"
32
33 #include "prims/whitebox.hpp"
34 #include "prims/wbtestmethods/parserTests.hpp"
35
36 #include "runtime/arguments.hpp"
37 #include "runtime/interfaceSupport.hpp"
38 #include "runtime/os.hpp"
39 #include "utilities/debug.hpp"
40 #include "utilities/macros.hpp"
41
42 #if INCLUDE_ALL_GCS
43 #include "gc_implementation/g1/concurrentMark.hpp"
44 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
45 #include "gc_implementation/g1/heapRegionRemSet.hpp"
46 #endif // INCLUDE_ALL_GCS
47
48 #ifdef INCLUDE_NMT
49 #include "services/memTracker.hpp"
50 #endif // INCLUDE_NMT
51
52 #include "compiler/compileBroker.hpp"
53 #include "runtime/compilationPolicy.hpp"
54
55 bool WhiteBox::_used = false;
56
77 }
78 }
79
80 bool found() const {
81 return _found;
82 }
83 };
84
85 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
86 Handle h_name = JNIHandles::resolve(name);
87 if (h_name.is_null()) return false;
88 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
89 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
90
91 WBIsKlassAliveClosure closure(sym);
92 ClassLoaderDataGraph::classes_do(&closure);
93
94 return closure.found();
95 WB_END
96
97 WB_ENTRY(void, WB_PrintCompressedOopsHeapInfo(JNIEnv* env, jobject o)) {
98 gclog_or_tty->print_cr("Max heap for compressed oops "SIZE_FORMAT" ClassMetaspaceSize "SIZE_FORMAT,
99 Arguments::max_heap_for_compressed_oops(), ClassMetaspaceSize);
100 }
101 WB_END
102
103 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
104 CollectorPolicy * p = Universe::heap()->collector_policy();
105 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
106 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
107 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
108 p->min_alignment(), p->max_alignment());
109 }
110 WB_END
111
112 #if INCLUDE_ALL_GCS
113 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
114 G1CollectedHeap* g1 = G1CollectedHeap::heap();
115 oop result = JNIHandles::resolve(obj);
116 const HeapRegion* hr = g1->heap_region_containing(result);
117 return hr->isHumongous();
118 WB_END
119
120 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
121 G1CollectedHeap* g1 = G1CollectedHeap::heap();
122 size_t nr = g1->free_regions();
385 }
386
387 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
388 int offset =
389 offset_for_field(field_name, object, vmSymbols::bool_signature());
390 bool ret = (object->bool_field(offset) == JNI_TRUE);
391 return ret;
392 }
393
394
395 #define CC (char*)
396
397 static JNINativeMethod methods[] = {
398 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
399 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
400 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
401 {CC"parseCommandLine",
402 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
403 (void*) &WB_ParseCommandLine
404 },
405 {CC"printCompressedOopsHeapInfo",
406 CC"()V",
407 (void*)&WB_PrintCompressedOopsHeapInfo},
408 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
409 #if INCLUDE_ALL_GCS
410 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
411 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
412 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
413 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
414 #endif // INCLUDE_ALL_GCS
415 #ifdef INCLUDE_NMT
416 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
417 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
418 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
419 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
420 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
421 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
422 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
423 #endif // INCLUDE_NMT
424 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
425 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
426 (void*)&WB_DeoptimizeMethod },
427 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
|