Print this page


@@ -190,10 +190,13 @@
   HeapWord*  _nearLargestChunk;
   // Used to keep track of limit of sweep for the space
   HeapWord* _sweep_limit;
+  // Stable value of used().
+  size_t _used_stable;
   // Used to make the young collector update the mod union table
   MemRegionClosure* _preconsumptionDirtyCardClosure;
   // Support for compacting cms
   HeapWord* cross_threshold(HeapWord* start, HeapWord* end);

@@ -410,10 +413,21 @@
   // try to bump down the address and the allocator will try to bump it up.
   // For now, however, we'll just use the default used_region()
   // which overestimates the region by returning the entire
   // committed region (this is safe, but inefficient).
+  // Returns monotonically increasing stable used space bytes for CMS.
+  // This is required for jhat and other memory monitoring tools
+  // that might otherwise see inconsistent used space values during a garbage 
+  // collection, promotion or allocation into compactibleFreeListSpace.
+  // The value returned by this function might be smaller than the
+  // actual value.
+  size_t used_stable() const;
+  // Recalculate and cache the current stable used() value. Only to be called
+  // in places where we can be sure that the result is stable.
+  void recalculate_used_stable();
   // Returns a subregion of the space containing all the objects in
   // the space.
   MemRegion used_region() const {
     return MemRegion(bottom(),
                      BlockOffsetArrayUseUnallocatedBlock ?