src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp

changeset 2533
c5a923563727
parent 2314
f95d63e2154a
child 2708
1d1603768966
equal deleted inserted replaced
2532:c798c277ddd1 2533: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++;)

mercurial