hotspot/src/share/vm/services/management.cpp
changeset 9623 151c0b638488
parent 8337 ccb1f3acfe94
child 11209 110525ac80b0
equal deleted inserted replaced
9622:3268587f3fb9 9623:151c0b638488
    40 #include "runtime/os.hpp"
    40 #include "runtime/os.hpp"
    41 #include "runtime/serviceThread.hpp"
    41 #include "runtime/serviceThread.hpp"
    42 #include "services/classLoadingService.hpp"
    42 #include "services/classLoadingService.hpp"
    43 #include "services/heapDumper.hpp"
    43 #include "services/heapDumper.hpp"
    44 #include "services/lowMemoryDetector.hpp"
    44 #include "services/lowMemoryDetector.hpp"
       
    45 #include "services/gcNotifier.hpp"
    45 #include "services/management.hpp"
    46 #include "services/management.hpp"
    46 #include "services/memoryManager.hpp"
    47 #include "services/memoryManager.hpp"
    47 #include "services/memoryPool.hpp"
    48 #include "services/memoryPool.hpp"
    48 #include "services/memoryService.hpp"
    49 #include "services/memoryService.hpp"
    49 #include "services/runtimeService.hpp"
    50 #include "services/runtimeService.hpp"
    58 klassOop Management::_memoryUsage_klass = NULL;
    59 klassOop Management::_memoryUsage_klass = NULL;
    59 klassOop Management::_memoryPoolMXBean_klass = NULL;
    60 klassOop Management::_memoryPoolMXBean_klass = NULL;
    60 klassOop Management::_memoryManagerMXBean_klass = NULL;
    61 klassOop Management::_memoryManagerMXBean_klass = NULL;
    61 klassOop Management::_garbageCollectorMXBean_klass = NULL;
    62 klassOop Management::_garbageCollectorMXBean_klass = NULL;
    62 klassOop Management::_managementFactory_klass = NULL;
    63 klassOop Management::_managementFactory_klass = NULL;
       
    64 klassOop Management::_garbageCollectorImpl_klass = NULL;
       
    65 klassOop Management::_gcInfo_klass = NULL;
    63 
    66 
    64 jmmOptionalSupport Management::_optional_support = {0};
    67 jmmOptionalSupport Management::_optional_support = {0};
    65 TimeStamp Management::_stamp;
    68 TimeStamp Management::_stamp;
    66 
    69 
    67 void management_init() {
    70 void management_init() {
   177   f->do_oop((oop*) &_memoryUsage_klass);
   180   f->do_oop((oop*) &_memoryUsage_klass);
   178   f->do_oop((oop*) &_memoryPoolMXBean_klass);
   181   f->do_oop((oop*) &_memoryPoolMXBean_klass);
   179   f->do_oop((oop*) &_memoryManagerMXBean_klass);
   182   f->do_oop((oop*) &_memoryManagerMXBean_klass);
   180   f->do_oop((oop*) &_garbageCollectorMXBean_klass);
   183   f->do_oop((oop*) &_garbageCollectorMXBean_klass);
   181   f->do_oop((oop*) &_managementFactory_klass);
   184   f->do_oop((oop*) &_managementFactory_klass);
       
   185   f->do_oop((oop*) &_garbageCollectorImpl_klass);
       
   186   f->do_oop((oop*) &_gcInfo_klass);
   182 }
   187 }
   183 
   188 
   184 klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) {
   189 klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) {
   185   if (_threadInfo_klass == NULL) {
   190   if (_threadInfo_klass == NULL) {
   186     _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL);
   191     _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL);
   226 klassOop Management::sun_management_ManagementFactory_klass(TRAPS) {
   231 klassOop Management::sun_management_ManagementFactory_klass(TRAPS) {
   227   if (_managementFactory_klass == NULL) {
   232   if (_managementFactory_klass == NULL) {
   228     _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL);
   233     _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL);
   229   }
   234   }
   230   return _managementFactory_klass;
   235   return _managementFactory_klass;
       
   236 }
       
   237 
       
   238 klassOop Management::sun_management_GarbageCollectorImpl_klass(TRAPS) {
       
   239   if (_garbageCollectorImpl_klass == NULL) {
       
   240     _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL);
       
   241   }
       
   242   return _garbageCollectorImpl_klass;
       
   243 }
       
   244 
       
   245 klassOop Management::com_sun_management_GcInfo_klass(TRAPS) {
       
   246   if (_gcInfo_klass == NULL) {
       
   247     _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL);
       
   248   }
       
   249   return _gcInfo_klass;
   231 }
   250 }
   232 
   251 
   233 static void initialize_ThreadInfo_constructor_arguments(JavaCallArguments* args, ThreadSnapshot* snapshot, TRAPS) {
   252 static void initialize_ThreadInfo_constructor_arguments(JavaCallArguments* args, ThreadSnapshot* snapshot, TRAPS) {
   234   Handle snapshot_thread(THREAD, snapshot->threadObj());
   253   Handle snapshot_thread(THREAD, snapshot->threadObj());
   235 
   254 
  2052   if (gc_stat->gc_ext_attribute_values_size > 0) {
  2071   if (gc_stat->gc_ext_attribute_values_size > 0) {
  2053     // Current implementation only has 1 attribute (number of GC threads)
  2072     // Current implementation only has 1 attribute (number of GC threads)
  2054     // The type is 'I'
  2073     // The type is 'I'
  2055     gc_stat->gc_ext_attribute_values[0].i = mgr->num_gc_threads();
  2074     gc_stat->gc_ext_attribute_values[0].i = mgr->num_gc_threads();
  2056   }
  2075   }
       
  2076 JVM_END
       
  2077 
       
  2078 JVM_ENTRY(void, jmm_SetGCNotificationEnabled(JNIEnv *env, jobject obj, jboolean enabled))
       
  2079   ResourceMark rm(THREAD);
       
  2080   // Get the GCMemoryManager
       
  2081   GCMemoryManager* mgr = get_gc_memory_manager_from_jobject(obj, CHECK);
       
  2082   mgr->set_notification_enabled(enabled?true:false);
  2057 JVM_END
  2083 JVM_END
  2058 
  2084 
  2059 // Dump heap - Returns 0 if succeeds.
  2085 // Dump heap - Returns 0 if succeeds.
  2060 JVM_ENTRY(jint, jmm_DumpHeap0(JNIEnv *env, jstring outputfile, jboolean live))
  2086 JVM_ENTRY(jint, jmm_DumpHeap0(JNIEnv *env, jstring outputfile, jboolean live))
  2061 #ifndef SERVICES_KERNEL
  2087 #ifndef SERVICES_KERNEL
  2120   jmm_GetThreadCpuTimesWithKind,
  2146   jmm_GetThreadCpuTimesWithKind,
  2121   jmm_DumpHeap0,
  2147   jmm_DumpHeap0,
  2122   jmm_FindDeadlockedThreads,
  2148   jmm_FindDeadlockedThreads,
  2123   jmm_SetVMGlobal,
  2149   jmm_SetVMGlobal,
  2124   NULL,
  2150   NULL,
  2125   jmm_DumpThreads
  2151   jmm_DumpThreads,
       
  2152   jmm_SetGCNotificationEnabled
  2126 };
  2153 };
  2127 
  2154 
  2128 void* Management::get_jmm_interface(int version) {
  2155 void* Management::get_jmm_interface(int version) {
  2129   if (version == JMM_VERSION_1_0) {
  2156   if (version == JMM_VERSION_1_0) {
  2130     return (void*) &jmm_interface;
  2157     return (void*) &jmm_interface;