Mercurial > hg > truffle
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++;) |