hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Thu Feb 03 20:49:09 2011 -0800
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Feb 07 22:19:57 2011 -0800
@@ -1040,9 +1040,10 @@
} else {
// must read from what 'p' points to in each loop.
klassOop k = ((volatile oopDesc*)p)->klass_or_null();
- if (k != NULL &&
- ((oopDesc*)p)->is_parsable() &&
- ((oopDesc*)p)->is_conc_safe()) {
+ // We trust the size of any object that has a non-NULL
+ // klass and (for those in the perm gen) is parsable
+ // -- irrespective of its conc_safe-ty.
+ if (k != NULL && ((oopDesc*)p)->is_parsable()) {
assert(k->is_oop(), "Should really be klass oop.");
oop o = (oop)p;
assert(o->is_oop(), "Should be an oop");
@@ -1051,6 +1052,7 @@
assert(res != 0, "Block size should not be 0");
return res;
} else {
+ // May return 0 if P-bits not present.
return c->block_size_if_printezis_bits(p);
}
}