hotspot/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp
changeset 38704 eb96c446c3a5
parent 38637 dba1e7561542
child 39270 9b12d5739295
equal deleted inserted replaced
38703:d3906fec707e 38704:eb96c446c3a5
  6094           // A non-array may have been imprecisely marked; we need
  6094           // A non-array may have been imprecisely marked; we need
  6095           // to scan object in its entirety.
  6095           // to scan object in its entirety.
  6096           size = CompactibleFreeListSpace::adjustObjectSize(
  6096           size = CompactibleFreeListSpace::adjustObjectSize(
  6097                    p->oop_iterate_size(_scanningClosure));
  6097                    p->oop_iterate_size(_scanningClosure));
  6098         }
  6098         }
  6099         #ifdef ASSERT
  6099       #ifdef ASSERT
  6100           size_t direct_size =
  6100         size_t direct_size =
  6101             CompactibleFreeListSpace::adjustObjectSize(p->size());
  6101           CompactibleFreeListSpace::adjustObjectSize(p->size());
  6102           assert(size == direct_size, "Inconsistency in size");
  6102         assert(size == direct_size, "Inconsistency in size");
  6103           assert(size >= 3, "Necessary for Printezis marks to work");
  6103         assert(size >= 3, "Necessary for Printezis marks to work");
  6104           if (!_bitMap->isMarked(addr+1)) {
  6104         HeapWord* start_pbit = addr + 1;
  6105             _bitMap->verifyNoOneBitsInRange(addr+2, addr+size);
  6105         HeapWord* end_pbit = addr + size - 1;
  6106           } else {
  6106         assert(_bitMap->isMarked(start_pbit) == _bitMap->isMarked(end_pbit),
  6107             _bitMap->verifyNoOneBitsInRange(addr+2, addr+size-1);
  6107                "inconsistent Printezis mark");
  6108             assert(_bitMap->isMarked(addr+size-1),
  6108         // Verify inner mark bits (between Printezis bits) are clear,
  6109                    "inconsistent Printezis mark");
  6109         // but don't repeat if there are multiple dirty regions for
  6110           }
  6110         // the same object, to avoid potential O(N^2) performance.
  6111         #endif // ASSERT
  6111         if (addr != _last_scanned_object) {
       
  6112           _bitMap->verifyNoOneBitsInRange(start_pbit + 1, end_pbit);
       
  6113           _last_scanned_object = addr;
       
  6114         }
       
  6115       #endif // ASSERT
  6112     } else {
  6116     } else {
  6113       // An uninitialized object.
  6117       // An uninitialized object.
  6114       assert(_bitMap->isMarked(addr+1), "missing Printezis mark?");
  6118       assert(_bitMap->isMarked(addr+1), "missing Printezis mark?");
  6115       HeapWord* nextOneAddr = _bitMap->getNextMarkedWordAddress(addr + 2);
  6119       HeapWord* nextOneAddr = _bitMap->getNextMarkedWordAddress(addr + 2);
  6116       size = pointer_delta(nextOneAddr + 1, addr);
  6120       size = pointer_delta(nextOneAddr + 1, addr);