338 #endif // INCLUDE_ALL_GCS
339 GenCollectedHeap* gch = GenCollectedHeap::heap();
340 return !gch->is_in_young(p);
341 WB_END
342
343 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
344 oop p = JNIHandles::resolve(obj);
345 return p->size() * HeapWordSize;
346 WB_END
347
348 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
349 size_t alignment = Universe::heap()->collector_policy()->space_alignment();
350 return (jlong)alignment;
351 WB_END
352
353 WB_ENTRY(jlong, WB_GetHeapAlignment(JNIEnv* env, jobject o))
354 size_t alignment = Universe::heap()->collector_policy()->heap_alignment();
355 return (jlong)alignment;
356 WB_END
357
358 #if INCLUDE_ALL_GCS
359 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
360 G1CollectedHeap* g1 = G1CollectedHeap::heap();
361 oop result = JNIHandles::resolve(obj);
362 const HeapRegion* hr = g1->heap_region_containing(result);
363 return hr->is_humongous();
364 WB_END
365
366 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
367 G1CollectedHeap* g1 = G1CollectedHeap::heap();
368 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
369 return hr->is_humongous();
370 WB_END
371
372 WB_ENTRY(jboolean, WB_G1BelongsToFreeRegion(JNIEnv* env, jobject o, jlong addr))
373 G1CollectedHeap* g1 = G1CollectedHeap::heap();
374 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
375 return hr->is_free();
376 WB_END
377
1888 (void*)&WB_GetMethodIntxOption},
1889 {CC"getMethodUintxOption",
1890 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1891 (void*)&WB_GetMethodUintxOption},
1892 {CC"getMethodDoubleOption",
1893 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
1894 (void*)&WB_GetMethodDoubleOption},
1895 {CC"getMethodStringOption",
1896 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/String;",
1897 (void*)&WB_GetMethodStringOption},
1898 {CC"isShared", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsShared },
1899 {CC"isSharedClass", CC"(Ljava/lang/Class;)Z", (void*)&WB_IsSharedClass },
1900 {CC"areSharedStringsIgnored", CC"()Z", (void*)&WB_AreSharedStringsIgnored },
1901 {CC"clearInlineCaches0", CC"(Z)V", (void*)&WB_ClearInlineCaches },
1902 {CC"addCompilerDirective", CC"(Ljava/lang/String;)I",
1903 (void*)&WB_AddCompilerDirective },
1904 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective },
1905 {CC"currentGC", CC"()I", (void*)&WB_CurrentGC},
1906 {CC"allSupportedGC", CC"()I", (void*)&WB_AllSupportedGC},
1907 {CC"gcSelectedByErgo", CC"()Z", (void*)&WB_GCSelectedByErgo},
1908 };
1909
1910 #undef CC
1911
1912 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
1913 {
1914 if (WhiteBoxAPI) {
1915 // Make sure that wbclass is loaded by the null classloader
1916 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
1917 Handle loader(THREAD, ikh->class_loader());
1918 if (loader.is_null()) {
1919 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
1920 WhiteBox::register_extended(env, wbclass, thread);
1921 WhiteBox::set_used();
1922 }
1923 }
1924 }
1925 JVM_END
|
338 #endif // INCLUDE_ALL_GCS
339 GenCollectedHeap* gch = GenCollectedHeap::heap();
340 return !gch->is_in_young(p);
341 WB_END
342
343 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
344 oop p = JNIHandles::resolve(obj);
345 return p->size() * HeapWordSize;
346 WB_END
347
348 WB_ENTRY(jlong, WB_GetHeapSpaceAlignment(JNIEnv* env, jobject o))
349 size_t alignment = Universe::heap()->collector_policy()->space_alignment();
350 return (jlong)alignment;
351 WB_END
352
353 WB_ENTRY(jlong, WB_GetHeapAlignment(JNIEnv* env, jobject o))
354 size_t alignment = Universe::heap()->collector_policy()->heap_alignment();
355 return (jlong)alignment;
356 WB_END
357
358 WB_ENTRY(jboolean, WB_SupportsConcurrentGCPhaseControl(JNIEnv* env, jobject o))
359 return Universe::heap()->supports_concurrent_phase_control();
360 WB_END
361
362 WB_ENTRY(jobjectArray, WB_GetConcurrentGCPhases(JNIEnv* env, jobject o))
363 const char* const* phases = Universe::heap()->concurrent_phases();
364 jint nphases = 0;
365 for ( ; phases[nphases] != NULL; ++nphases) ;
366
367 ResourceMark rm(thread);
368 ThreadToNativeFromVM ttn(thread);
369 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
370 CHECK_JNI_EXCEPTION_(env, NULL);
371
372 jobjectArray result = env->NewObjectArray(nphases, clazz, NULL);
373 CHECK_JNI_EXCEPTION_(env, NULL);
374
375 // If push fails, return with pending exception.
376 if (env->PushLocalFrame(nphases) < 0) return NULL;
377 for (jint i = 0; i < nphases; ++i) {
378 jstring phase = env->NewStringUTF(phases[i]);
379 CHECK_JNI_EXCEPTION_(env, NULL);
380 env->SetObjectArrayElement(result, i, phase);
381 CHECK_JNI_EXCEPTION_(env, NULL);
382 }
383 env->PopLocalFrame(NULL);
384
385 return result;
386 WB_END
387
388 WB_ENTRY(jboolean, WB_RequestConcurrentGCPhase(JNIEnv* env, jobject o, jstring name))
389 Handle h_name(THREAD, JNIHandles::resolve(name));
390 ResourceMark rm;
391 const char* c_name = java_lang_String::as_utf8_string(h_name());
392 return Universe::heap()->request_concurrent_phase(c_name);
393 WB_END
394
395 #if INCLUDE_ALL_GCS
396 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
397 G1CollectedHeap* g1 = G1CollectedHeap::heap();
398 oop result = JNIHandles::resolve(obj);
399 const HeapRegion* hr = g1->heap_region_containing(result);
400 return hr->is_humongous();
401 WB_END
402
403 WB_ENTRY(jboolean, WB_G1BelongsToHumongousRegion(JNIEnv* env, jobject o, jlong addr))
404 G1CollectedHeap* g1 = G1CollectedHeap::heap();
405 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
406 return hr->is_humongous();
407 WB_END
408
409 WB_ENTRY(jboolean, WB_G1BelongsToFreeRegion(JNIEnv* env, jobject o, jlong addr))
410 G1CollectedHeap* g1 = G1CollectedHeap::heap();
411 const HeapRegion* hr = g1->heap_region_containing((void*) addr);
412 return hr->is_free();
413 WB_END
414
1925 (void*)&WB_GetMethodIntxOption},
1926 {CC"getMethodUintxOption",
1927 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1928 (void*)&WB_GetMethodUintxOption},
1929 {CC"getMethodDoubleOption",
1930 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
1931 (void*)&WB_GetMethodDoubleOption},
1932 {CC"getMethodStringOption",
1933 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/String;",
1934 (void*)&WB_GetMethodStringOption},
1935 {CC"isShared", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsShared },
1936 {CC"isSharedClass", CC"(Ljava/lang/Class;)Z", (void*)&WB_IsSharedClass },
1937 {CC"areSharedStringsIgnored", CC"()Z", (void*)&WB_AreSharedStringsIgnored },
1938 {CC"clearInlineCaches0", CC"(Z)V", (void*)&WB_ClearInlineCaches },
1939 {CC"addCompilerDirective", CC"(Ljava/lang/String;)I",
1940 (void*)&WB_AddCompilerDirective },
1941 {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective },
1942 {CC"currentGC", CC"()I", (void*)&WB_CurrentGC},
1943 {CC"allSupportedGC", CC"()I", (void*)&WB_AllSupportedGC},
1944 {CC"gcSelectedByErgo", CC"()Z", (void*)&WB_GCSelectedByErgo},
1945 {CC"supportsConcurrentGCPhaseControl", CC"()Z", (void*)&WB_SupportsConcurrentGCPhaseControl},
1946 {CC"getConcurrentGCPhases", CC"()[Ljava/lang/String;",
1947 (void*)&WB_GetConcurrentGCPhases},
1948 {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z",
1949 (void*)&WB_RequestConcurrentGCPhase},
1950 };
1951
1952 #undef CC
1953
1954 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
1955 {
1956 if (WhiteBoxAPI) {
1957 // Make sure that wbclass is loaded by the null classloader
1958 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
1959 Handle loader(THREAD, ikh->class_loader());
1960 if (loader.is_null()) {
1961 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
1962 WhiteBox::register_extended(env, wbclass, thread);
1963 WhiteBox::set_used();
1964 }
1965 }
1966 }
1967 JVM_END
|