comparison src/share/vm/classfile/classFileParser.cpp @ 10303:205dd30230e1

8012939: @Contended doesn't work correctly with inheritance Summary: Fix instance_size miscalculation. Reviewed-by: jrose, kvn
author shade
date Fri, 17 May 2013 01:43:48 +0400
parents a9270d9ecb13
children 50e9396d5257
comparison
equal deleted inserted replaced
10301:17db82f22f1e 10303:205dd30230e1
3163 ((fac->count[STATIC_SHORT]) * BytesPerShort); 3163 ((fac->count[STATIC_SHORT]) * BytesPerShort);
3164 3164
3165 first_nonstatic_field_offset = instanceOopDesc::base_offset_in_bytes() + 3165 first_nonstatic_field_offset = instanceOopDesc::base_offset_in_bytes() +
3166 nonstatic_field_size * heapOopSize; 3166 nonstatic_field_size * heapOopSize;
3167 3167
3168 next_nonstatic_field_offset = first_nonstatic_field_offset;
3169
3168 // class is contended, pad before all the fields 3170 // class is contended, pad before all the fields
3169 if (parsed_annotations->is_contended()) { 3171 if (parsed_annotations->is_contended()) {
3170 first_nonstatic_field_offset += pad_size; 3172 next_nonstatic_field_offset += pad_size;
3171 } 3173 }
3172
3173 next_nonstatic_field_offset = first_nonstatic_field_offset;
3174 3174
3175 unsigned int nonstatic_double_count = fac->count[NONSTATIC_DOUBLE] - fac_contended.count[NONSTATIC_DOUBLE]; 3175 unsigned int nonstatic_double_count = fac->count[NONSTATIC_DOUBLE] - fac_contended.count[NONSTATIC_DOUBLE];
3176 unsigned int nonstatic_word_count = fac->count[NONSTATIC_WORD] - fac_contended.count[NONSTATIC_WORD]; 3176 unsigned int nonstatic_word_count = fac->count[NONSTATIC_WORD] - fac_contended.count[NONSTATIC_WORD];
3177 unsigned int nonstatic_short_count = fac->count[NONSTATIC_SHORT] - fac_contended.count[NONSTATIC_SHORT]; 3177 unsigned int nonstatic_short_count = fac->count[NONSTATIC_SHORT] - fac_contended.count[NONSTATIC_SHORT];
3178 unsigned int nonstatic_byte_count = fac->count[NONSTATIC_BYTE] - fac_contended.count[NONSTATIC_BYTE]; 3178 unsigned int nonstatic_byte_count = fac->count[NONSTATIC_BYTE] - fac_contended.count[NONSTATIC_BYTE];
3560 3560
3561 next_nonstatic_type_offset = align_size_up(notaligned_offset, wordSize ); 3561 next_nonstatic_type_offset = align_size_up(notaligned_offset, wordSize );
3562 int instance_size = align_object_size(next_nonstatic_type_offset / wordSize); 3562 int instance_size = align_object_size(next_nonstatic_type_offset / wordSize);
3563 3563
3564 assert(instance_size == align_object_size(align_size_up( 3564 assert(instance_size == align_object_size(align_size_up(
3565 (instanceOopDesc::base_offset_in_bytes() + nonstatic_field_size*heapOopSize + ((parsed_annotations->is_contended()) ? pad_size : 0)), 3565 (instanceOopDesc::base_offset_in_bytes() + nonstatic_field_size*heapOopSize),
3566 wordSize) / wordSize), "consistent layout helper value"); 3566 wordSize) / wordSize), "consistent layout helper value");
3567 3567
3568 // Number of non-static oop map blocks allocated at end of klass. 3568 // Number of non-static oop map blocks allocated at end of klass.
3569 const unsigned int total_oop_map_count = 3569 const unsigned int total_oop_map_count =
3570 compute_oop_map_count(_super_klass, nonstatic_oop_map_count, 3570 compute_oop_map_count(_super_klass, nonstatic_oop_map_count,