Mercurial > hg > graal-jvmci-8
comparison src/share/vm/oops/instanceKlassKlass.cpp @ 2177:3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
Summary: move symbols from permgen into C heap and reference count them
Reviewed-by: never, acorn, jmasa, stefank
author | coleenp |
---|---|
date | Thu, 27 Jan 2011 16:11:27 -0800 |
parents | f95d63e2154a |
children | e5383553fd4e |
comparison
equal
deleted
inserted
replaced
2176:27e4ea99855d | 2177:3582bf76420e |
---|---|
35 #include "oops/instanceRefKlass.hpp" | 35 #include "oops/instanceRefKlass.hpp" |
36 #include "oops/objArrayKlassKlass.hpp" | 36 #include "oops/objArrayKlassKlass.hpp" |
37 #include "oops/objArrayOop.hpp" | 37 #include "oops/objArrayOop.hpp" |
38 #include "oops/oop.inline.hpp" | 38 #include "oops/oop.inline.hpp" |
39 #include "oops/oop.inline2.hpp" | 39 #include "oops/oop.inline2.hpp" |
40 #include "oops/symbolOop.hpp" | 40 #include "oops/symbol.hpp" |
41 #include "oops/typeArrayOop.hpp" | 41 #include "oops/typeArrayOop.hpp" |
42 #include "prims/jvmtiExport.hpp" | 42 #include "prims/jvmtiExport.hpp" |
43 #include "runtime/fieldDescriptor.hpp" | 43 #include "runtime/fieldDescriptor.hpp" |
44 #ifndef SERIALGC | 44 #ifndef SERIALGC |
45 #include "gc_implementation/parNew/parOopClosures.inline.hpp" | 45 #include "gc_implementation/parNew/parOopClosures.inline.hpp" |
99 MarkSweep::mark_and_push(ik->adr_local_interfaces()); | 99 MarkSweep::mark_and_push(ik->adr_local_interfaces()); |
100 MarkSweep::mark_and_push(ik->adr_transitive_interfaces()); | 100 MarkSweep::mark_and_push(ik->adr_transitive_interfaces()); |
101 MarkSweep::mark_and_push(ik->adr_fields()); | 101 MarkSweep::mark_and_push(ik->adr_fields()); |
102 MarkSweep::mark_and_push(ik->adr_constants()); | 102 MarkSweep::mark_and_push(ik->adr_constants()); |
103 MarkSweep::mark_and_push(ik->adr_class_loader()); | 103 MarkSweep::mark_and_push(ik->adr_class_loader()); |
104 MarkSweep::mark_and_push(ik->adr_source_file_name()); | |
105 MarkSweep::mark_and_push(ik->adr_source_debug_extension()); | |
106 MarkSweep::mark_and_push(ik->adr_inner_classes()); | 104 MarkSweep::mark_and_push(ik->adr_inner_classes()); |
107 MarkSweep::mark_and_push(ik->adr_protection_domain()); | 105 MarkSweep::mark_and_push(ik->adr_protection_domain()); |
108 MarkSweep::mark_and_push(ik->adr_host_klass()); | 106 MarkSweep::mark_and_push(ik->adr_host_klass()); |
109 MarkSweep::mark_and_push(ik->adr_signers()); | 107 MarkSweep::mark_and_push(ik->adr_signers()); |
110 MarkSweep::mark_and_push(ik->adr_generic_signature()); | |
111 MarkSweep::mark_and_push(ik->adr_bootstrap_method()); | 108 MarkSweep::mark_and_push(ik->adr_bootstrap_method()); |
112 MarkSweep::mark_and_push(ik->adr_class_annotations()); | 109 MarkSweep::mark_and_push(ik->adr_class_annotations()); |
113 MarkSweep::mark_and_push(ik->adr_fields_annotations()); | 110 MarkSweep::mark_and_push(ik->adr_fields_annotations()); |
114 MarkSweep::mark_and_push(ik->adr_methods_annotations()); | 111 MarkSweep::mark_and_push(ik->adr_methods_annotations()); |
115 MarkSweep::mark_and_push(ik->adr_methods_parameter_annotations()); | 112 MarkSweep::mark_and_push(ik->adr_methods_parameter_annotations()); |
140 PSParallelCompact::mark_and_push(cm, ik->adr_local_interfaces()); | 137 PSParallelCompact::mark_and_push(cm, ik->adr_local_interfaces()); |
141 PSParallelCompact::mark_and_push(cm, ik->adr_transitive_interfaces()); | 138 PSParallelCompact::mark_and_push(cm, ik->adr_transitive_interfaces()); |
142 PSParallelCompact::mark_and_push(cm, ik->adr_fields()); | 139 PSParallelCompact::mark_and_push(cm, ik->adr_fields()); |
143 PSParallelCompact::mark_and_push(cm, ik->adr_constants()); | 140 PSParallelCompact::mark_and_push(cm, ik->adr_constants()); |
144 PSParallelCompact::mark_and_push(cm, ik->adr_class_loader()); | 141 PSParallelCompact::mark_and_push(cm, ik->adr_class_loader()); |
145 PSParallelCompact::mark_and_push(cm, ik->adr_source_file_name()); | |
146 PSParallelCompact::mark_and_push(cm, ik->adr_source_debug_extension()); | |
147 PSParallelCompact::mark_and_push(cm, ik->adr_inner_classes()); | 142 PSParallelCompact::mark_and_push(cm, ik->adr_inner_classes()); |
148 PSParallelCompact::mark_and_push(cm, ik->adr_protection_domain()); | 143 PSParallelCompact::mark_and_push(cm, ik->adr_protection_domain()); |
149 PSParallelCompact::mark_and_push(cm, ik->adr_host_klass()); | 144 PSParallelCompact::mark_and_push(cm, ik->adr_host_klass()); |
150 PSParallelCompact::mark_and_push(cm, ik->adr_signers()); | 145 PSParallelCompact::mark_and_push(cm, ik->adr_signers()); |
151 PSParallelCompact::mark_and_push(cm, ik->adr_generic_signature()); | |
152 PSParallelCompact::mark_and_push(cm, ik->adr_bootstrap_method()); | 146 PSParallelCompact::mark_and_push(cm, ik->adr_bootstrap_method()); |
153 PSParallelCompact::mark_and_push(cm, ik->adr_class_annotations()); | 147 PSParallelCompact::mark_and_push(cm, ik->adr_class_annotations()); |
154 PSParallelCompact::mark_and_push(cm, ik->adr_fields_annotations()); | 148 PSParallelCompact::mark_and_push(cm, ik->adr_fields_annotations()); |
155 PSParallelCompact::mark_and_push(cm, ik->adr_methods_annotations()); | 149 PSParallelCompact::mark_and_push(cm, ik->adr_methods_annotations()); |
156 PSParallelCompact::mark_and_push(cm, ik->adr_methods_parameter_annotations()); | 150 PSParallelCompact::mark_and_push(cm, ik->adr_methods_parameter_annotations()); |
187 blk->do_oop(ik->adr_constants()); | 181 blk->do_oop(ik->adr_constants()); |
188 blk->do_oop(ik->adr_class_loader()); | 182 blk->do_oop(ik->adr_class_loader()); |
189 blk->do_oop(ik->adr_protection_domain()); | 183 blk->do_oop(ik->adr_protection_domain()); |
190 blk->do_oop(ik->adr_host_klass()); | 184 blk->do_oop(ik->adr_host_klass()); |
191 blk->do_oop(ik->adr_signers()); | 185 blk->do_oop(ik->adr_signers()); |
192 blk->do_oop(ik->adr_source_file_name()); | |
193 blk->do_oop(ik->adr_source_debug_extension()); | |
194 blk->do_oop(ik->adr_inner_classes()); | 186 blk->do_oop(ik->adr_inner_classes()); |
195 for (int i = 0; i < instanceKlass::implementors_limit; i++) { | 187 for (int i = 0; i < instanceKlass::implementors_limit; i++) { |
196 blk->do_oop(&ik->adr_implementors()[i]); | 188 blk->do_oop(&ik->adr_implementors()[i]); |
197 } | 189 } |
198 blk->do_oop(ik->adr_generic_signature()); | |
199 blk->do_oop(ik->adr_bootstrap_method()); | 190 blk->do_oop(ik->adr_bootstrap_method()); |
200 blk->do_oop(ik->adr_class_annotations()); | 191 blk->do_oop(ik->adr_class_annotations()); |
201 blk->do_oop(ik->adr_fields_annotations()); | 192 blk->do_oop(ik->adr_fields_annotations()); |
202 blk->do_oop(ik->adr_methods_annotations()); | 193 blk->do_oop(ik->adr_methods_annotations()); |
203 blk->do_oop(ik->adr_methods_parameter_annotations()); | 194 blk->do_oop(ik->adr_methods_parameter_annotations()); |
243 if (mr.contains(adr)) blk->do_oop(adr); | 234 if (mr.contains(adr)) blk->do_oop(adr); |
244 adr = ik->adr_host_klass(); | 235 adr = ik->adr_host_klass(); |
245 if (mr.contains(adr)) blk->do_oop(adr); | 236 if (mr.contains(adr)) blk->do_oop(adr); |
246 adr = ik->adr_signers(); | 237 adr = ik->adr_signers(); |
247 if (mr.contains(adr)) blk->do_oop(adr); | 238 if (mr.contains(adr)) blk->do_oop(adr); |
248 adr = ik->adr_source_file_name(); | |
249 if (mr.contains(adr)) blk->do_oop(adr); | |
250 adr = ik->adr_source_debug_extension(); | |
251 if (mr.contains(adr)) blk->do_oop(adr); | |
252 adr = ik->adr_inner_classes(); | 239 adr = ik->adr_inner_classes(); |
253 if (mr.contains(adr)) blk->do_oop(adr); | 240 if (mr.contains(adr)) blk->do_oop(adr); |
254 adr = ik->adr_implementors(); | 241 adr = ik->adr_implementors(); |
255 for (int i = 0; i < instanceKlass::implementors_limit; i++) { | 242 for (int i = 0; i < instanceKlass::implementors_limit; i++) { |
256 if (mr.contains(&adr[i])) blk->do_oop(&adr[i]); | 243 if (mr.contains(&adr[i])) blk->do_oop(&adr[i]); |
257 } | 244 } |
258 adr = ik->adr_generic_signature(); | |
259 if (mr.contains(adr)) blk->do_oop(adr); | |
260 adr = ik->adr_bootstrap_method(); | 245 adr = ik->adr_bootstrap_method(); |
261 if (mr.contains(adr)) blk->do_oop(adr); | 246 if (mr.contains(adr)) blk->do_oop(adr); |
262 adr = ik->adr_class_annotations(); | 247 adr = ik->adr_class_annotations(); |
263 if (mr.contains(adr)) blk->do_oop(adr); | 248 if (mr.contains(adr)) blk->do_oop(adr); |
264 adr = ik->adr_fields_annotations(); | 249 adr = ik->adr_fields_annotations(); |
294 MarkSweep::adjust_pointer(ik->adr_constants()); | 279 MarkSweep::adjust_pointer(ik->adr_constants()); |
295 MarkSweep::adjust_pointer(ik->adr_class_loader()); | 280 MarkSweep::adjust_pointer(ik->adr_class_loader()); |
296 MarkSweep::adjust_pointer(ik->adr_protection_domain()); | 281 MarkSweep::adjust_pointer(ik->adr_protection_domain()); |
297 MarkSweep::adjust_pointer(ik->adr_host_klass()); | 282 MarkSweep::adjust_pointer(ik->adr_host_klass()); |
298 MarkSweep::adjust_pointer(ik->adr_signers()); | 283 MarkSweep::adjust_pointer(ik->adr_signers()); |
299 MarkSweep::adjust_pointer(ik->adr_source_file_name()); | |
300 MarkSweep::adjust_pointer(ik->adr_source_debug_extension()); | |
301 MarkSweep::adjust_pointer(ik->adr_inner_classes()); | 284 MarkSweep::adjust_pointer(ik->adr_inner_classes()); |
302 for (int i = 0; i < instanceKlass::implementors_limit; i++) { | 285 for (int i = 0; i < instanceKlass::implementors_limit; i++) { |
303 MarkSweep::adjust_pointer(&ik->adr_implementors()[i]); | 286 MarkSweep::adjust_pointer(&ik->adr_implementors()[i]); |
304 } | 287 } |
305 MarkSweep::adjust_pointer(ik->adr_generic_signature()); | |
306 MarkSweep::adjust_pointer(ik->adr_bootstrap_method()); | 288 MarkSweep::adjust_pointer(ik->adr_bootstrap_method()); |
307 MarkSweep::adjust_pointer(ik->adr_class_annotations()); | 289 MarkSweep::adjust_pointer(ik->adr_class_annotations()); |
308 MarkSweep::adjust_pointer(ik->adr_fields_annotations()); | 290 MarkSweep::adjust_pointer(ik->adr_fields_annotations()); |
309 MarkSweep::adjust_pointer(ik->adr_methods_annotations()); | 291 MarkSweep::adjust_pointer(ik->adr_methods_annotations()); |
310 MarkSweep::adjust_pointer(ik->adr_methods_parameter_annotations()); | 292 MarkSweep::adjust_pointer(ik->adr_methods_parameter_annotations()); |
450 ik->set_protection_domain(NULL); | 432 ik->set_protection_domain(NULL); |
451 ik->set_host_klass(NULL); | 433 ik->set_host_klass(NULL); |
452 ik->set_signers(NULL); | 434 ik->set_signers(NULL); |
453 ik->set_source_file_name(NULL); | 435 ik->set_source_file_name(NULL); |
454 ik->set_source_debug_extension(NULL); | 436 ik->set_source_debug_extension(NULL); |
437 ik->set_source_debug_extension(NULL); | |
438 ik->set_array_name(NULL); | |
455 ik->set_inner_classes(NULL); | 439 ik->set_inner_classes(NULL); |
456 ik->set_static_oop_field_size(0); | 440 ik->set_static_oop_field_size(0); |
457 ik->set_nonstatic_field_size(0); | 441 ik->set_nonstatic_field_size(0); |
458 ik->set_is_marked_dependent(false); | 442 ik->set_is_marked_dependent(false); |
459 ik->set_init_state(instanceKlass::allocated); | 443 ik->set_init_state(instanceKlass::allocated); |
665 if (ik->_verify_count == Universe::verify_count()) return; | 649 if (ik->_verify_count == Universe::verify_count()) return; |
666 ik->_verify_count = Universe::verify_count(); | 650 ik->_verify_count = Universe::verify_count(); |
667 #endif | 651 #endif |
668 // Verify that klass is present in SystemDictionary | 652 // Verify that klass is present in SystemDictionary |
669 if (ik->is_loaded() && !ik->is_anonymous()) { | 653 if (ik->is_loaded() && !ik->is_anonymous()) { |
670 symbolHandle h_name (thread, ik->name()); | 654 Symbol* h_name = ik->name(); |
671 Handle h_loader (thread, ik->class_loader()); | 655 Handle h_loader (thread, ik->class_loader()); |
672 Handle h_obj(thread, obj); | 656 Handle h_obj(thread, obj); |
673 SystemDictionary::verify_obj_klass_present(h_obj, h_name, h_loader); | 657 SystemDictionary::verify_obj_klass_present(h_obj, h_name, h_loader); |
674 } | 658 } |
675 | 659 |
791 guarantee(ik->fields()->is_typeArray(), "should be type array"); | 775 guarantee(ik->fields()->is_typeArray(), "should be type array"); |
792 guarantee(ik->constants()->is_perm(), "should be in permspace"); | 776 guarantee(ik->constants()->is_perm(), "should be in permspace"); |
793 guarantee(ik->constants()->is_constantPool(), "should be constant pool"); | 777 guarantee(ik->constants()->is_constantPool(), "should be constant pool"); |
794 guarantee(ik->inner_classes()->is_perm(), "should be in permspace"); | 778 guarantee(ik->inner_classes()->is_perm(), "should be in permspace"); |
795 guarantee(ik->inner_classes()->is_typeArray(), "should be type array"); | 779 guarantee(ik->inner_classes()->is_typeArray(), "should be type array"); |
796 if (ik->source_file_name() != NULL) { | |
797 guarantee(ik->source_file_name()->is_perm(), "should be in permspace"); | |
798 guarantee(ik->source_file_name()->is_symbol(), "should be symbol"); | |
799 } | |
800 if (ik->source_debug_extension() != NULL) { | |
801 guarantee(ik->source_debug_extension()->is_perm(), "should be in permspace"); | |
802 guarantee(ik->source_debug_extension()->is_symbol(), "should be symbol"); | |
803 } | |
804 if (ik->protection_domain() != NULL) { | 780 if (ik->protection_domain() != NULL) { |
805 guarantee(ik->protection_domain()->is_oop(), "should be oop"); | 781 guarantee(ik->protection_domain()->is_oop(), "should be oop"); |
806 } | 782 } |
807 if (ik->host_klass() != NULL) { | 783 if (ik->host_klass() != NULL) { |
808 guarantee(ik->host_klass()->is_oop(), "should be oop"); | 784 guarantee(ik->host_klass()->is_oop(), "should be oop"); |
809 } | 785 } |
810 if (ik->signers() != NULL) { | 786 if (ik->signers() != NULL) { |
811 guarantee(ik->signers()->is_objArray(), "should be obj array"); | 787 guarantee(ik->signers()->is_objArray(), "should be obj array"); |
812 } | |
813 if (ik->generic_signature() != NULL) { | |
814 guarantee(ik->generic_signature()->is_perm(), "should be in permspace"); | |
815 guarantee(ik->generic_signature()->is_symbol(), "should be symbol"); | |
816 } | 788 } |
817 if (ik->class_annotations() != NULL) { | 789 if (ik->class_annotations() != NULL) { |
818 guarantee(ik->class_annotations()->is_typeArray(), "should be type array"); | 790 guarantee(ik->class_annotations()->is_typeArray(), "should be type array"); |
819 } | 791 } |
820 if (ik->fields_annotations() != NULL) { | 792 if (ik->fields_annotations() != NULL) { |