Mercurial > hg > truffle
comparison src/share/vm/ci/ciEnv.hpp @ 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 | 7f813940ac35 |
children | 137868b7aa6f |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
76 bool _dtrace_method_probes; | 76 bool _dtrace_method_probes; |
77 bool _dtrace_alloc_probes; | 77 bool _dtrace_alloc_probes; |
78 | 78 |
79 // Distinguished instances of certain ciObjects.. | 79 // Distinguished instances of certain ciObjects.. |
80 static ciObject* _null_object_instance; | 80 static ciObject* _null_object_instance; |
81 static ciMethodKlass* _method_klass_instance; | |
82 static ciKlassKlass* _klass_klass_instance; | |
83 static ciInstanceKlassKlass* _instance_klass_klass_instance; | |
84 static ciTypeArrayKlassKlass* _type_array_klass_klass_instance; | |
85 static ciObjArrayKlassKlass* _obj_array_klass_klass_instance; | |
86 | 81 |
87 #define WK_KLASS_DECL(name, ignore_s, ignore_o) static ciInstanceKlass* _##name; | 82 #define WK_KLASS_DECL(name, ignore_s, ignore_o) static ciInstanceKlass* _##name; |
88 WK_KLASSES_DO(WK_KLASS_DECL) | 83 WK_KLASSES_DO(WK_KLASS_DECL) |
89 #undef WK_KLASS_DECL | 84 #undef WK_KLASS_DECL |
90 | 85 |
153 int method_index, Bytecodes::Code bc, | 148 int method_index, Bytecodes::Code bc, |
154 ciInstanceKlass* loading_klass); | 149 ciInstanceKlass* loading_klass); |
155 | 150 |
156 // Helper methods | 151 // Helper methods |
157 bool check_klass_accessibility(ciKlass* accessing_klass, | 152 bool check_klass_accessibility(ciKlass* accessing_klass, |
158 klassOop resolved_klassOop); | 153 Klass* resolved_klass); |
159 methodOop lookup_method(instanceKlass* accessor, | 154 Method* lookup_method(InstanceKlass* accessor, |
160 instanceKlass* holder, | 155 InstanceKlass* holder, |
161 Symbol* name, | 156 Symbol* name, |
162 Symbol* sig, | 157 Symbol* sig, |
163 Bytecodes::Code bc); | 158 Bytecodes::Code bc); |
164 | 159 |
165 // Get a ciObject from the object factory. Ensures uniqueness | 160 // Get a ciObject from the object factory. Ensures uniqueness |
179 } else { | 174 } else { |
180 return _factory->get_symbol(o); | 175 return _factory->get_symbol(o); |
181 } | 176 } |
182 } | 177 } |
183 | 178 |
184 ciMethod* get_method_from_handle(jobject method); | 179 ciMetadata* get_metadata(Metadata* o) { |
180 if (o == NULL) { | |
181 return NULL; | |
182 } else { | |
183 return _factory->get_metadata(o); | |
184 } | |
185 } | |
186 | |
187 ciInstance* get_instance(oop o) { | |
188 if (o == NULL) return NULL; | |
189 return get_object(o)->as_instance(); | |
190 } | |
191 ciObjArrayKlass* get_obj_array_klass(Klass* o) { | |
192 if (o == NULL) return NULL; | |
193 return get_metadata(o)->as_obj_array_klass(); | |
194 } | |
195 ciTypeArrayKlass* get_type_array_klass(Klass* o) { | |
196 if (o == NULL) return NULL; | |
197 return get_metadata(o)->as_type_array_klass(); | |
198 } | |
199 ciKlass* get_klass(Klass* o) { | |
200 if (o == NULL) return NULL; | |
201 return get_metadata(o)->as_klass(); | |
202 } | |
203 ciInstanceKlass* get_instance_klass(Klass* o) { | |
204 if (o == NULL) return NULL; | |
205 return get_metadata(o)->as_instance_klass(); | |
206 } | |
207 ciMethod* get_method(Method* o) { | |
208 if (o == NULL) return NULL; | |
209 return get_metadata(o)->as_method(); | |
210 } | |
211 ciMethodData* get_method_data(MethodData* o) { | |
212 if (o == NULL) return NULL; | |
213 return get_metadata(o)->as_method_data(); | |
214 } | |
215 | |
216 ciMethod* get_method_from_handle(Method* method); | |
185 | 217 |
186 ciInstance* get_or_create_exception(jobject& handle, Symbol* name); | 218 ciInstance* get_or_create_exception(jobject& handle, Symbol* name); |
187 | 219 |
188 // Get a ciMethod representing either an unfound method or | 220 // Get a ciMethod representing either an unfound method or |
189 // a method with an unloaded holder. Ensures uniqueness of | 221 // a method with an unloaded holder. Ensures uniqueness of |
370 | 402 |
371 ciKlass* find_system_klass(ciSymbol* klass_name); | 403 ciKlass* find_system_klass(ciSymbol* klass_name); |
372 // Note: To find a class from its name string, use ciSymbol::make, | 404 // Note: To find a class from its name string, use ciSymbol::make, |
373 // but consider adding to vmSymbols.hpp instead. | 405 // but consider adding to vmSymbols.hpp instead. |
374 | 406 |
375 // Use this to make a holder for non-perm compile time constants. | |
376 // The resulting array is guaranteed to satisfy "can_be_constant". | |
377 ciArray* make_system_array(GrowableArray<ciObject*>* objects); | |
378 | |
379 // converts the ciKlass* representing the holder of a method into a | 407 // converts the ciKlass* representing the holder of a method into a |
380 // ciInstanceKlass*. This is needed since the holder of a method in | 408 // ciInstanceKlass*. This is needed since the holder of a method in |
381 // the bytecodes could be an array type. Basically this converts | 409 // the bytecodes could be an array type. Basically this converts |
382 // array types into java/lang/Object and other types stay as they are. | 410 // array types into java/lang/Object and other types stay as they are. |
383 static ciInstanceKlass* get_instance_klass_for_declared_method_holder(ciKlass* klass); | 411 static ciInstanceKlass* get_instance_klass_for_declared_method_holder(ciKlass* klass); |
414 bool system_dictionary_modification_counter_changed(); | 442 bool system_dictionary_modification_counter_changed(); |
415 | 443 |
416 void record_failure(const char* reason); | 444 void record_failure(const char* reason); |
417 void record_method_not_compilable(const char* reason, bool all_tiers = true); | 445 void record_method_not_compilable(const char* reason, bool all_tiers = true); |
418 void record_out_of_memory_failure(); | 446 void record_out_of_memory_failure(); |
447 | |
448 // RedefineClasses support | |
449 void metadata_do(void f(Metadata*)) { _factory->metadata_do(f); } | |
419 }; | 450 }; |
420 | 451 |
421 #endif // SHARE_VM_CI_CIENV_HPP | 452 #endif // SHARE_VM_CI_CIENV_HPP |