1080 // stable. But being a free chunk may not be (because of parallel |
1080 // stable. But being a free chunk may not be (because of parallel |
1081 // promotion.) |
1081 // promotion.) |
1082 bool CompactibleFreeListSpace::block_is_obj(const HeapWord* p) const { |
1082 bool CompactibleFreeListSpace::block_is_obj(const HeapWord* p) const { |
1083 FreeChunk* fc = (FreeChunk*)p; |
1083 FreeChunk* fc = (FreeChunk*)p; |
1084 assert(is_in_reserved(p), "Should be in space"); |
1084 assert(is_in_reserved(p), "Should be in space"); |
1085 // When doing a mark-sweep-compact of the CMS generation, this |
|
1086 // assertion may fail because prepare_for_compaction() uses |
|
1087 // space that is garbage to maintain information on ranges of |
|
1088 // live objects so that these live ranges can be moved as a whole. |
|
1089 // Comment out this assertion until that problem can be solved |
|
1090 // (i.e., that the block start calculation may look at objects |
|
1091 // at address below "p" in finding the object that contains "p" |
|
1092 // and those objects (if garbage) may have been modified to hold |
|
1093 // live range information. |
|
1094 // assert(CollectedHeap::use_parallel_gc_threads() || _bt.block_start(p) == p, |
|
1095 // "Should be a block boundary"); |
|
1096 if (FreeChunk::indicatesFreeChunk(p)) return false; |
1085 if (FreeChunk::indicatesFreeChunk(p)) return false; |
1097 Klass* k = oop(p)->klass_or_null(); |
1086 Klass* k = oop(p)->klass_or_null(); |
1098 if (k != NULL) { |
1087 if (k != NULL) { |
1099 // Ignore mark word because it may have been used to |
1088 // Ignore mark word because it may have been used to |
1100 // chain together promoted objects (the last one |
1089 // chain together promoted objects (the last one |