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) {