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 #include "utilities/exceptions.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;
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_PrintHeapSizes(JNIEnv* env, jobject o)) {
98 CollectorPolicy * p = Universe::heap()->collector_policy();
99 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
100 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
101 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
102 p->min_alignment(), p->max_alignment());
103 }
104 WB_END
105
106 #if INCLUDE_ALL_GCS
107 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
108 G1CollectedHeap* g1 = G1CollectedHeap::heap();
109 oop result = JNIHandles::resolve(obj);
110 const HeapRegion* hr = g1->heap_region_containing(result);
111 return hr->isHumongous();
112 WB_END
113
114 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
115 G1CollectedHeap* g1 = G1CollectedHeap::heap();
116 size_t nr = g1->free_regions();
389 }
390
391 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
392 int offset =
393 offset_for_field(field_name, object, vmSymbols::bool_signature());
394 bool ret = (object->bool_field(offset) == JNI_TRUE);
395 return ret;
396 }
397
398
399 #define CC (char*)
400
401 static JNINativeMethod methods[] = {
402 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
403 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
404 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
405 {CC"parseCommandLine",
406 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
407 (void*) &WB_ParseCommandLine
408 },
409 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
410 #if INCLUDE_ALL_GCS
411 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
412 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
413 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
414 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
415 #endif // INCLUDE_ALL_GCS
416 #ifdef INCLUDE_NMT
417 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
418 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
419 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
420 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
421 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
422 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
423 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
424 #endif // INCLUDE_NMT
425 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
426 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
427 (void*)&WB_DeoptimizeMethod },
428 {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 #include "utilities/exceptions.hpp"
42
43 #if INCLUDE_ALL_GCS
44 #include "gc_implementation/g1/concurrentMark.hpp"
45 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
46 #include "gc_implementation/g1/heapRegionRemSet.hpp"
47 #endif // INCLUDE_ALL_GCS
48
49 #ifdef INCLUDE_NMT
50 #include "services/memTracker.hpp"
51 #endif // INCLUDE_NMT
52
53 #include "compiler/compileBroker.hpp"
54 #include "runtime/compilationPolicy.hpp"
55
56 bool WhiteBox::_used = false;
78 }
79 }
80
81 bool found() const {
82 return _found;
83 }
84 };
85
86 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
87 Handle h_name = JNIHandles::resolve(name);
88 if (h_name.is_null()) return false;
89 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
90 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
91
92 WBIsKlassAliveClosure closure(sym);
93 ClassLoaderDataGraph::classes_do(&closure);
94
95 return closure.found();
96 WB_END
97
98 WB_ENTRY(void, WB_PrintCompressedOopsHeapInfo(JNIEnv* env, jobject o)) {
99 gclog_or_tty->print_cr("Max heap for compressed oops "SIZE_FORMAT" ClassMetaspaceSize "SIZE_FORMAT,
100 Arguments::max_heap_for_compressed_oops(), ClassMetaspaceSize);
101 }
102 WB_END
103
104 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
105 CollectorPolicy * p = Universe::heap()->collector_policy();
106 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
107 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
108 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
109 p->min_alignment(), p->max_alignment());
110 }
111 WB_END
112
113 #if INCLUDE_ALL_GCS
114 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
115 G1CollectedHeap* g1 = G1CollectedHeap::heap();
116 oop result = JNIHandles::resolve(obj);
117 const HeapRegion* hr = g1->heap_region_containing(result);
118 return hr->isHumongous();
119 WB_END
120
121 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
122 G1CollectedHeap* g1 = G1CollectedHeap::heap();
123 size_t nr = g1->free_regions();
396 }
397
398 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
399 int offset =
400 offset_for_field(field_name, object, vmSymbols::bool_signature());
401 bool ret = (object->bool_field(offset) == JNI_TRUE);
402 return ret;
403 }
404
405
406 #define CC (char*)
407
408 static JNINativeMethod methods[] = {
409 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
410 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
411 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
412 {CC"parseCommandLine",
413 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
414 (void*) &WB_ParseCommandLine
415 },
416 {CC"printCompressedOopsHeapInfo",
417 CC"()V",
418 (void*)&WB_PrintCompressedOopsHeapInfo},
419 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
420 #if INCLUDE_ALL_GCS
421 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
422 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
423 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
424 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
425 #endif // INCLUDE_ALL_GCS
426 #ifdef INCLUDE_NMT
427 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
428 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
429 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
430 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
431 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
432 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
433 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
434 #endif // INCLUDE_NMT
435 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
436 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
437 (void*)&WB_DeoptimizeMethod },
438 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
|