1.1 --- a/src/share/vm/services/management.cpp Wed May 11 13:19:53 2011 -0400 1.2 +++ b/src/share/vm/services/management.cpp Thu May 12 10:30:11 2011 -0700 1.3 @@ -42,6 +42,7 @@ 1.4 #include "services/classLoadingService.hpp" 1.5 #include "services/heapDumper.hpp" 1.6 #include "services/lowMemoryDetector.hpp" 1.7 +#include "services/gcNotifier.hpp" 1.8 #include "services/management.hpp" 1.9 #include "services/memoryManager.hpp" 1.10 #include "services/memoryPool.hpp" 1.11 @@ -60,6 +61,8 @@ 1.12 klassOop Management::_memoryManagerMXBean_klass = NULL; 1.13 klassOop Management::_garbageCollectorMXBean_klass = NULL; 1.14 klassOop Management::_managementFactory_klass = NULL; 1.15 +klassOop Management::_garbageCollectorImpl_klass = NULL; 1.16 +klassOop Management::_gcInfo_klass = NULL; 1.17 1.18 jmmOptionalSupport Management::_optional_support = {0}; 1.19 TimeStamp Management::_stamp; 1.20 @@ -179,6 +182,8 @@ 1.21 f->do_oop((oop*) &_memoryManagerMXBean_klass); 1.22 f->do_oop((oop*) &_garbageCollectorMXBean_klass); 1.23 f->do_oop((oop*) &_managementFactory_klass); 1.24 + f->do_oop((oop*) &_garbageCollectorImpl_klass); 1.25 + f->do_oop((oop*) &_gcInfo_klass); 1.26 } 1.27 1.28 klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) { 1.29 @@ -230,6 +235,20 @@ 1.30 return _managementFactory_klass; 1.31 } 1.32 1.33 +klassOop Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { 1.34 + if (_garbageCollectorImpl_klass == NULL) { 1.35 + _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL); 1.36 + } 1.37 + return _garbageCollectorImpl_klass; 1.38 +} 1.39 + 1.40 +klassOop Management::com_sun_management_GcInfo_klass(TRAPS) { 1.41 + if (_gcInfo_klass == NULL) { 1.42 + _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL); 1.43 + } 1.44 + return _gcInfo_klass; 1.45 +} 1.46 + 1.47 static void initialize_ThreadInfo_constructor_arguments(JavaCallArguments* args, ThreadSnapshot* snapshot, TRAPS) { 1.48 Handle snapshot_thread(THREAD, snapshot->threadObj()); 1.49 1.50 @@ -2056,6 +2075,13 @@ 1.51 } 1.52 JVM_END 1.53 1.54 +JVM_ENTRY(void, jmm_SetGCNotificationEnabled(JNIEnv *env, jobject obj, jboolean enabled)) 1.55 + ResourceMark rm(THREAD); 1.56 + // Get the GCMemoryManager 1.57 + GCMemoryManager* mgr = get_gc_memory_manager_from_jobject(obj, CHECK); 1.58 + mgr->set_notification_enabled(enabled?true:false); 1.59 +JVM_END 1.60 + 1.61 // Dump heap - Returns 0 if succeeds. 1.62 JVM_ENTRY(jint, jmm_DumpHeap0(JNIEnv *env, jstring outputfile, jboolean live)) 1.63 #ifndef SERVICES_KERNEL 1.64 @@ -2122,7 +2148,8 @@ 1.65 jmm_FindDeadlockedThreads, 1.66 jmm_SetVMGlobal, 1.67 NULL, 1.68 - jmm_DumpThreads 1.69 + jmm_DumpThreads, 1.70 + jmm_SetGCNotificationEnabled 1.71 }; 1.72 1.73 void* Management::get_jmm_interface(int version) {