--- old/src/share/vm/prims/whitebox.cpp Wed Apr 13 18:06:44 2016 +++ new/src/share/vm/prims/whitebox.cpp Wed Apr 13 18:06:44 2016 @@ -277,6 +277,68 @@ (size_t) magnitude, (size_t) iterations); WB_END +WB_ENTRY(jboolean, WB_SupportsSerialGC(JNIEnv* env, jobject o, jobject obj)) + return true; +WB_END + +WB_ENTRY(jboolean, WB_SupportsParallelGC(JNIEnv* env, jobject o, jobject obj)) +#if INCLUDE_ALL_GCS + return true; +#else + return false; +#endif // INCLUDE_ALL_GCS +WB_END + +WB_ENTRY(jboolean, WB_SupportsConcMarkSweepGC(JNIEnv* env, jobject o, jobject obj)) +#if INCLUDE_ALL_GCS + return true; +#else + return false; +#endif // INCLUDE_ALL_GCS +WB_END + +WB_ENTRY(jboolean, WB_SupportsG1GC(JNIEnv* env, jobject o, jobject obj)) +#if INCLUDE_ALL_GCS + return true; +#else + return false; +#endif // INCLUDE_ALL_GCS +WB_END + +WB_ENTRY(jboolean, WB_GcSelectedByErgo0(JNIEnv* env, jobject o, jobject obj)) + if (UseSerialGC) { + return FLAG_IS_ERGO(UseSerialGC); + } + if (UseParallelGC) { + return FLAG_IS_ERGO(UseParallelGC); + } + if (UseParallelOldGC) { + return FLAG_IS_ERGO(UseParallelOldGC); + } + if (UseConcMarkSweepGC) { + return FLAG_IS_ERGO(UseConcMarkSweepGC); + } + if (UseG1GC) { + return FLAG_IS_ERGO(UseG1GC); + } + return false; // should not reach here +WB_END + +WB_ENTRY(jstring, WB_GetGC(JNIEnv* env, jobject o)) + const char* gc = "unknown"; + if (UseSerialGC) { + gc = "Serial"; + } else if (UseParallelGC | UseParallelOldGC) { + gc = "Parallel"; + } else if (UseConcMarkSweepGC) { + gc = "ConcMarkSweep"; + } else if (UseG1GC) { + gc = "G1"; + } + jstring gc_string = env->NewStringUTF(gc); + return gc_string; +WB_END + WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj)) oop p = JNIHandles::resolve(obj); #if INCLUDE_ALL_GCS @@ -1758,6 +1820,14 @@ {CC"addCompilerDirective", CC"(Ljava/lang/String;)I", (void*)&WB_AddCompilerDirective }, {CC"removeCompilerDirective", CC"(I)V", (void*)&WB_RemoveCompilerDirective }, + + {CC"getGC", CC"()Ljava/lang/String;", (void*)&WB_GetGC}, + {CC"gcSelectedByErgo0", CC"()Z", (void*)&WB_GcSelectedByErgo0}, + {CC"supportsSerialGC", CC"()Z", (void*)&WB_SupportsSerialGC}, + {CC"supportsParallelGC", CC"()Z", (void*)&WB_SupportsParallelGC}, + {CC"supportsConcMarkSweepGC", CC"()Z", (void*)&WB_SupportsConcMarkSweepGC}, + {CC"supportsG1GC", CC"()Z", (void*)&WB_SupportsG1GC}, + }; #undef CC