Request for review (small) 8026303: CMS: JVM intermittently crashes with "FreeList of size 258 violates Con,servation Principle" assert

Jon Masamitsu jon.masamitsu at oracle.com
Tue Aug 12 20:29:37 UTC 2014


This change has been reviewed before but the integration
was delayed so these are webrevs with respect to the current
source.

The patches applied cleanly and, except as noted below, the
changes in the .00 and .01 webrevs are equivalent.

New webrev for fix for the bug.

http://cr.openjdk.java.net/~jmasa/8026303/webrev.01/

New webrev for code restructuring where the
fix was made.

http://cr.openjdk.java.net/~jmasa/8026303/webrev_cleanup.01/

This change was applied in an earlier changeset so is no
longer part of this patch.

--- 
old/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp 
  Fri Nov 22 14:41:11 2013
+++ 
new/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp 
  Fri Nov 22 14:41:10 2013
@@ -158,7 +158,7 @@
                   " coal_deaths(" SIZE_FORMAT ")"
                   " + count(" SSIZE_FORMAT ")",
                   this, size(), _allocation_stats.prev_sweep(), 
_allocation_stats.split_births(),
-                 _allocation_stats.split_births(), 
_allocation_stats.split_deaths(),
+                 _allocation_stats.coal_births(), 
_allocation_stats.split_deaths(),
                   _allocation_stats.coal_deaths(), count()));
  }
  #endif

On 11/22/2013 05:54 PM, Jon Masamitsu wrote:
> 8026303: CMS: JVM intermittently crashes with "FreeList of size 258 
> violates Con
> servation Principle" assert
>
> CompactibleFreeListSpace:: par_get_chunk_of_blocks() replenishes
> the free list of a given size by splitting a larger chunk. The code
> searched for a block that was large enough to split. If a large enough
> chunk was found it was removed from the dictionary and a split death
> was recorded. If the remainder after splitting would be too small, that
> block was returned to the dictionary but forgot to fix the split death
> accounting
>
> The fix was to move the split death accounting to the point where
> it was known that the chunk would not be put back into the dictionary.
> There was also code moved which did the accounting for the
> _unallocated_block (updated it to account for the allocation which
> could change _unallocated_block).
>
> The fix
>
> http://cr.openjdk.java.net/~jmasa/8026303/webrev.00/
>
> A small amount of code refactoring was done and is in
> a second webrev (along with the fix above).  Both changes
> will be put back together.
>
> http://cr.openjdk.java.net/~jmasa/8026303/webrev_cleanup.00/
>
> Thanks.
>
> Jon
>
>
>



More information about the hotspot-gc-dev mailing list