comparison src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @ 2226:c5a923563727

6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?") Summary: Fix block_size_if_printezis_bits() so it does not expect the bits, only uses them when available. Fix block_size_no_stall() so it does not stall when the bits are missing such cases, letting the caller deal with zero size returns. Constant pool cache oops do not need to be unparsable or conc_unsafe after their klass pointer is installed. Some cosmetic clean-ups and some assertion checking for conc-usafety which, in the presence of class file redefinition, has no a-priori time boundedness, so all GCs must be able to safely deal with putatively conc-unsafe objects in a stop-world pause. Reviewed-by: jmasa, johnc
author ysr
date Mon, 07 Feb 2011 22:19:57 -0800
parents f95d63e2154a
children 1d1603768966
comparison
equal deleted inserted replaced
2225:c798c277ddd1 2226:c5a923563727
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++;)