hotspot/src/share/vm/services/gcNotifier.cpp
changeset 13728 882756847a04
parent 13195 be27e1b6a4b9
child 19144 02f1ea6475c0
equal deleted inserted replaced
13727:caf5eb7dd4a7 13728:882756847a04
    75   return first_request != NULL;
    75   return first_request != NULL;
    76 }
    76 }
    77 
    77 
    78 static Handle getGcInfoBuilder(GCMemoryManager *gcManager,TRAPS) {
    78 static Handle getGcInfoBuilder(GCMemoryManager *gcManager,TRAPS) {
    79 
    79 
    80   klassOop k = Management::sun_management_GarbageCollectorImpl_klass(CHECK_NH);
    80   Klass* k = Management::sun_management_GarbageCollectorImpl_klass(CHECK_NH);
    81   instanceKlassHandle gcMBeanKlass (THREAD, k);
    81   instanceKlassHandle gcMBeanKlass (THREAD, k);
    82 
    82 
    83   instanceOop i = gcManager->get_memory_manager_instance(THREAD);
    83   instanceOop i = gcManager->get_memory_manager_instance(THREAD);
    84   instanceHandle ih(THREAD, i);
    84   instanceHandle ih(THREAD, i);
    85 
    85 
    98 static Handle createGcInfo(GCMemoryManager *gcManager, GCStatInfo *gcStatInfo,TRAPS) {
    98 static Handle createGcInfo(GCMemoryManager *gcManager, GCStatInfo *gcStatInfo,TRAPS) {
    99 
    99 
   100   // Fill the arrays of MemoryUsage objects with before and after GC
   100   // Fill the arrays of MemoryUsage objects with before and after GC
   101   // per pool memory usage
   101   // per pool memory usage
   102 
   102 
   103   klassOop mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
   103   Klass* mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
   104   instanceKlassHandle mu_kh(THREAD, mu_klass);
   104   instanceKlassHandle mu_kh(THREAD, mu_klass);
   105 
   105 
   106   // The array allocations below should use a handle containing mu_klass
   106   // The array allocations below should use a handle containing mu_klass
   107   // as the first allocation could trigger a GC, causing the actual
   107   // as the first allocation could trigger a GC, causing the actual
   108   // klass oop to move, and leaving mu_klass pointing to the old
   108   // klass oop to move, and leaving mu_klass pointing to the old
   131 
   131 
   132   // Current implementation only has 1 attribute (number of GC threads)
   132   // Current implementation only has 1 attribute (number of GC threads)
   133   // The type is 'I'
   133   // The type is 'I'
   134   objArrayOop extra_args_array = oopFactory::new_objArray(SystemDictionary::Integer_klass(), 1, CHECK_NH);
   134   objArrayOop extra_args_array = oopFactory::new_objArray(SystemDictionary::Integer_klass(), 1, CHECK_NH);
   135   objArrayHandle extra_array (THREAD, extra_args_array);
   135   objArrayHandle extra_array (THREAD, extra_args_array);
   136   klassOop itKlass = SystemDictionary::Integer_klass();
   136   Klass* itKlass = SystemDictionary::Integer_klass();
   137   instanceKlassHandle intK(THREAD, itKlass);
   137   instanceKlassHandle intK(THREAD, itKlass);
   138 
   138 
   139   instanceHandle extra_arg_val = intK->allocate_instance_handle(CHECK_NH);
   139   instanceHandle extra_arg_val = intK->allocate_instance_handle(CHECK_NH);
   140 
   140 
   141   {
   141   {
   151                             &argsInt,
   151                             &argsInt,
   152                             CHECK_NH);
   152                             CHECK_NH);
   153   }
   153   }
   154   extra_array->obj_at_put(0,extra_arg_val());
   154   extra_array->obj_at_put(0,extra_arg_val());
   155 
   155 
   156   klassOop gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH);
   156   Klass* gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH);
   157   instanceKlassHandle ik(THREAD, gcInfoklass);
   157   instanceKlassHandle ik(THREAD, gcInfoklass);
   158 
   158 
   159   Handle gcInfo_instance = ik->allocate_instance_handle(CHECK_NH);
   159   Handle gcInfo_instance = ik->allocate_instance_handle(CHECK_NH);
   160 
   160 
   161   JavaValue constructor_result(T_VOID);
   161   JavaValue constructor_result(T_VOID);
   213 
   213 
   214     Handle objName = java_lang_String::create_from_platform_dependent_str(request->gcManager->name(), CHECK);
   214     Handle objName = java_lang_String::create_from_platform_dependent_str(request->gcManager->name(), CHECK);
   215     Handle objAction = java_lang_String::create_from_platform_dependent_str(request->gcAction, CHECK);
   215     Handle objAction = java_lang_String::create_from_platform_dependent_str(request->gcAction, CHECK);
   216     Handle objCause = java_lang_String::create_from_platform_dependent_str(request->gcCause, CHECK);
   216     Handle objCause = java_lang_String::create_from_platform_dependent_str(request->gcCause, CHECK);
   217 
   217 
   218     klassOop k = Management::sun_management_GarbageCollectorImpl_klass(CHECK);
   218     Klass* k = Management::sun_management_GarbageCollectorImpl_klass(CHECK);
   219     instanceKlassHandle gc_mbean_klass(THREAD, k);
   219     instanceKlassHandle gc_mbean_klass(THREAD, k);
   220 
   220 
   221     instanceOop gc_mbean = request->gcManager->get_memory_manager_instance(THREAD);
   221     instanceOop gc_mbean = request->gcManager->get_memory_manager_instance(THREAD);
   222     instanceHandle gc_mbean_h(THREAD, gc_mbean);
   222     instanceHandle gc_mbean_h(THREAD, gc_mbean);
   223     if (!gc_mbean_h->is_a(k)) {
   223     if (!gc_mbean_h->is_a(k)) {