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 #if INCLUDE_ALL_GCS
97 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
98 G1CollectedHeap* g1 = G1CollectedHeap::heap();
99 oop result = JNIHandles::resolve(obj);
100 const HeapRegion* hr = g1->heap_region_containing(result);
101 return hr->isHumongous();
102 WB_END
103
104 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
105 G1CollectedHeap* g1 = G1CollectedHeap::heap();
106 size_t nr = g1->free_regions();
107 return (jlong)nr;
108 WB_END
109
110 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
111 G1CollectedHeap* g1 = G1CollectedHeap::heap();
112 ConcurrentMark* cm = g1->concurrent_mark();
113 return cm->concurrent_marking_in_progress();
114 WB_END
115
368 }
369
370 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
371 int offset =
372 offset_for_field(field_name, object, vmSymbols::bool_signature());
373 bool ret = (object->bool_field(offset) == JNI_TRUE);
374 return ret;
375 }
376
377
378 #define CC (char*)
379
380 static JNINativeMethod methods[] = {
381 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
382 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
383 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
384 {CC"parseCommandLine",
385 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
386 (void*) &WB_ParseCommandLine
387 },
388 #if INCLUDE_ALL_GCS
389 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
390 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
391 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
392 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
393 #endif // INCLUDE_ALL_GCS
394 #ifdef INCLUDE_NMT
395 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
396 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
397 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
398 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
399 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
400 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
401 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
402 #endif // INCLUDE_NMT
403 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
404 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
405 (void*)&WB_DeoptimizeMethod },
406 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
407 (void*)&WB_IsMethodCompiled },
|
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();
116 return (jlong)nr;
117 WB_END
118
119 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
120 G1CollectedHeap* g1 = G1CollectedHeap::heap();
121 ConcurrentMark* cm = g1->concurrent_mark();
122 return cm->concurrent_marking_in_progress();
123 WB_END
124
377 }
378
379 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
380 int offset =
381 offset_for_field(field_name, object, vmSymbols::bool_signature());
382 bool ret = (object->bool_field(offset) == JNI_TRUE);
383 return ret;
384 }
385
386
387 #define CC (char*)
388
389 static JNINativeMethod methods[] = {
390 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
391 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
392 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
393 {CC"parseCommandLine",
394 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
395 (void*) &WB_ParseCommandLine
396 },
397 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
398 #if INCLUDE_ALL_GCS
399 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
400 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
401 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
402 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
403 #endif // INCLUDE_ALL_GCS
404 #ifdef INCLUDE_NMT
405 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
406 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
407 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
408 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
409 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
410 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
411 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
412 #endif // INCLUDE_NMT
413 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
414 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
415 (void*)&WB_DeoptimizeMethod },
416 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
417 (void*)&WB_IsMethodCompiled },
|