Mercurial > hg > truffle
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)) { |