comparison src/share/vm/services/gcNotifier.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents d2a62e0f25eb
children 32e3bada0978
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
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)) {