1038 return res; |
1038 return res; |
1039 } |
1039 } |
1040 } else { |
1040 } else { |
1041 // must read from what 'p' points to in each loop. |
1041 // must read from what 'p' points to in each loop. |
1042 klassOop k = ((volatile oopDesc*)p)->klass_or_null(); |
1042 klassOop k = ((volatile oopDesc*)p)->klass_or_null(); |
1043 if (k != NULL && |
1043 // We trust the size of any object that has a non-NULL |
1044 ((oopDesc*)p)->is_parsable() && |
1044 // klass and (for those in the perm gen) is parsable |
1045 ((oopDesc*)p)->is_conc_safe()) { |
1045 // -- irrespective of its conc_safe-ty. |
|
1046 if (k != NULL && ((oopDesc*)p)->is_parsable()) { |
1046 assert(k->is_oop(), "Should really be klass oop."); |
1047 assert(k->is_oop(), "Should really be klass oop."); |
1047 oop o = (oop)p; |
1048 oop o = (oop)p; |
1048 assert(o->is_oop(), "Should be an oop"); |
1049 assert(o->is_oop(), "Should be an oop"); |
1049 size_t res = o->size_given_klass(k->klass_part()); |
1050 size_t res = o->size_given_klass(k->klass_part()); |
1050 res = adjustObjectSize(res); |
1051 res = adjustObjectSize(res); |
1051 assert(res != 0, "Block size should not be 0"); |
1052 assert(res != 0, "Block size should not be 0"); |
1052 return res; |
1053 return res; |
1053 } else { |
1054 } else { |
|
1055 // May return 0 if P-bits not present. |
1054 return c->block_size_if_printezis_bits(p); |
1056 return c->block_size_if_printezis_bits(p); |
1055 } |
1057 } |
1056 } |
1058 } |
1057 assert(loops == 0, "Can loop at most once"); |
1059 assert(loops == 0, "Can loop at most once"); |
1058 DEBUG_ONLY(loops++;) |
1060 DEBUG_ONLY(loops++;) |