comparison src/share/vm/oops/instanceKlass.hpp @ 8031:927a311d00f9

8007320: NPG: move method annotations Summary: allocate method annotations and attach to ConstMethod if present Reviewed-by: dcubed, jiangli, sspitsyn, iklam
author coleenp
date Mon, 11 Feb 2013 14:06:22 -0500
parents 3c9bc17b9403
children 5fc51c1ecdeb 872b3feace55 3efdfd6ddbf2
comparison
equal deleted inserted replaced
8030:f989aff6946f 8031:927a311d00f9
153 int static_field_size, 153 int static_field_size,
154 int nonstatic_oop_map_size, 154 int nonstatic_oop_map_size,
155 ReferenceType rt, 155 ReferenceType rt,
156 AccessFlags access_flags, 156 AccessFlags access_flags,
157 Symbol* name, 157 Symbol* name,
158 Klass* super_klass, 158 Klass* super_klass,
159 KlassHandle host_klass, 159 bool is_anonymous,
160 TRAPS); 160 TRAPS);
161 161
162 InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } 162 InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
163 163
164 // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description 164 // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description
677 int cached_itable_index(size_t idnum); 677 int cached_itable_index(size_t idnum);
678 678
679 // annotations support 679 // annotations support
680 Annotations* annotations() const { return _annotations; } 680 Annotations* annotations() const { return _annotations; }
681 void set_annotations(Annotations* anno) { _annotations = anno; } 681 void set_annotations(Annotations* anno) { _annotations = anno; }
682
682 AnnotationArray* class_annotations() const { 683 AnnotationArray* class_annotations() const {
683 if (annotations() == NULL) return NULL; 684 return (_annotations != NULL) ? _annotations->class_annotations() : NULL;
684 return annotations()->class_annotations();
685 } 685 }
686 Array<AnnotationArray*>* fields_annotations() const { 686 Array<AnnotationArray*>* fields_annotations() const {
687 if (annotations() == NULL) return NULL; 687 return (_annotations != NULL) ? _annotations->fields_annotations() : NULL;
688 return annotations()->fields_annotations(); 688 }
689 } 689 AnnotationArray* class_type_annotations() const {
690 Annotations* type_annotations() const { 690 return (_annotations != NULL) ? _annotations->class_type_annotations() : NULL;
691 if (annotations() == NULL) return NULL; 691 }
692 return annotations()->type_annotations(); 692 Array<AnnotationArray*>* fields_type_annotations() const {
693 } 693 return (_annotations != NULL) ? _annotations->fields_type_annotations() : NULL;
694 694 }
695 // allocation 695 // allocation
696 instanceOop allocate_instance(TRAPS); 696 instanceOop allocate_instance(TRAPS);
697 697
698 // additional member function to return a handle 698 // additional member function to return a handle
699 instanceHandle allocate_instance_handle(TRAPS) { return instanceHandle(THREAD, allocate_instance(THREAD)); } 699 instanceHandle allocate_instance_handle(TRAPS) { return instanceHandle(THREAD, allocate_instance(THREAD)); }
808 return (super() == NULL) ? NULL : cast(super()); 808 return (super() == NULL) ? NULL : cast(super());
809 } 809 }
810 810
811 // Sizing (in words) 811 // Sizing (in words)
812 static int header_size() { return align_object_offset(sizeof(InstanceKlass)/HeapWordSize); } 812 static int header_size() { return align_object_offset(sizeof(InstanceKlass)/HeapWordSize); }
813
813 static int size(int vtable_length, int itable_length, 814 static int size(int vtable_length, int itable_length,
814 int nonstatic_oop_map_size, 815 int nonstatic_oop_map_size,
815 bool is_interface, bool is_anonymous) { 816 bool is_interface, bool is_anonymous) {
816 return align_object_size(header_size() + 817 return align_object_size(header_size() +
817 align_object_offset(vtable_length) + 818 align_object_offset(vtable_length) +
845 846
846 OopMapBlock* start_of_nonstatic_oop_maps() const { 847 OopMapBlock* start_of_nonstatic_oop_maps() const {
847 return (OopMapBlock*)(start_of_itable() + align_object_offset(itable_length())); 848 return (OopMapBlock*)(start_of_itable() + align_object_offset(itable_length()));
848 } 849 }
849 850
851 Klass** end_of_nonstatic_oop_maps() const {
852 return (Klass**)(start_of_nonstatic_oop_maps() +
853 nonstatic_oop_map_count());
854 }
855
850 Klass** adr_implementor() const { 856 Klass** adr_implementor() const {
851 if (is_interface()) { 857 if (is_interface()) {
852 return (Klass**)(start_of_nonstatic_oop_maps() + 858 return (Klass**)end_of_nonstatic_oop_maps();
853 nonstatic_oop_map_count());
854 } else { 859 } else {
855 return NULL; 860 return NULL;
856 } 861 }
857 }; 862 };
858 863
860 if (is_anonymous()) { 865 if (is_anonymous()) {
861 Klass** adr_impl = adr_implementor(); 866 Klass** adr_impl = adr_implementor();
862 if (adr_impl != NULL) { 867 if (adr_impl != NULL) {
863 return adr_impl + 1; 868 return adr_impl + 1;
864 } else { 869 } else {
865 return (Klass**)(start_of_nonstatic_oop_maps() + 870 return end_of_nonstatic_oop_maps();
866 nonstatic_oop_map_count());
867 } 871 }
868 } else { 872 } else {
869 return NULL; 873 return NULL;
870 } 874 }
871 } 875 }