--- old/src/share/vm/prims/whitebox.cpp 2015-03-03 18:32:37.855629144 +0300 +++ new/src/share/vm/prims/whitebox.cpp 2015-03-03 18:32:37.675626174 +0300 @@ -295,6 +295,12 @@ return hr->is_humongous(); WB_END +WB_ENTRY(jlong, WB_G1NumMaxRegions(JNIEnv* env, jobject o)) + G1CollectedHeap* g1 = G1CollectedHeap::heap(); + size_t nr = g1->max_regions(); + return (jlong)nr; +WB_END + WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o)) G1CollectedHeap* g1 = G1CollectedHeap::heap(); size_t nr = g1->num_free_regions(); @@ -318,6 +324,33 @@ WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o)) return (jint)HeapRegion::GrainBytes; WB_END + +WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env)) + ResourceMark rm(THREAD); + ThreadToNativeFromVM ttn(thread); + G1CollectedHeap* g1h = G1CollectedHeap::heap(); + MemoryUsage mu = g1h->get_auxiliary_data_memory_usage(); + + jclass jclass_memory_usage = env->FindClass("java/lang/management/MemoryUsage"); + CHECK_JNI_EXCEPTION_(env, NULL); + if (jclass_memory_usage == NULL) { + THROW_MSG_NULL(vmSymbols::java_lang_NoClassDefFoundError(), + "Cannot find class java/lang/management/MemoryUsage."); + } + + jmethodID ctor = env->GetMethodID(jclass_memory_usage, "", "(JJJJ)V"); + CHECK_JNI_EXCEPTION_(env, NULL); + if (ctor == NULL) { + THROW_MSG_NULL(vmSymbols::java_lang_NoSuchMethodError(), + "Cannot find constructor for MemoryUsage(long, long, long, long)."); + } + + jvalue args[4]; + args[0].j = 0; + args[1].j = mu.used(); + args[2].j = args[3].j = mu.committed(); + return env->NewObjectA(jclass_memory_usage, ctor, args); +WB_END #endif // INCLUDE_ALL_GCS #if INCLUDE_NMT @@ -1240,9 +1273,12 @@ #if INCLUDE_ALL_GCS {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark}, {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous }, + {CC"g1NumMaxRegions", CC"()J", (void*)&WB_G1NumMaxRegions }, {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions }, {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize }, {CC"g1StartConcMarkCycle", CC"()Z", (void*)&WB_G1StartMarkCycle }, + {CC"g1AuxiliaryMemoryUsage", CC"()Ljava/lang/management/MemoryUsage;", + (void*)&WB_G1AuxiliaryMemoryUsage }, #endif // INCLUDE_ALL_GCS #if INCLUDE_NMT {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },