Request for review (m) - 8008508: CMS does not correctly reduce heap size after a Full GC

John Cuthbertson john.cuthbertson at oracle.com
Mon Feb 25 23:48:18 UTC 2013


Hi Jon,

This looks good to me except you have left some instrumentation in 
generation.cpp:

>   597     // We have two shrinking computations, take the largest
>   598     shrink_bytes = MAX2(shrink_bytes, expansion_for_promotion);
>   599     assert(shrink_bytes <= max_shrink_bytes, "invalid shrink size");
>   600 if (true || PrintGC && Verbose) {
>   601       gclog_or_tty->print_cr("  "
>   602                              "  aggressive shrinking:"
>   603                              "  _capacity_at_prologue: %.1fK"
>   604                              "  capacity_after_gc: %.1fK"
>   605                              "  expansion_for_promotion: %.1fK"
>   606                              "  shrink_bytes: %.1fK",
>   607                              capacity_after_gc / (double) K,
>   608                              _capacity_at_prologue / (double) K,
>   609                              expansion_for_promotion / (double) K,
>   610                              shrink_bytes / (double) K);
>   611     }

and I don't think you need:

> 1083
> 1084   TenuredGeneration* as_TenuredGeneration() { return (TenuredGeneration*) this; }
> 1085
in ConcurrentMarkSweepGeneration.hpp anymore.

JohnC

On 2/19/2013 9:29 PM, Jon Masamitsu wrote:
> 8008508: CMS does not correctly reduce heap size after a Full GC
>
> http://cr.openjdk.java.net/~jmasa/8008508/webrev.00/
>
> The CMS generation has a CompactibleFreeListSpace that describes
> its part of the heap space.  The free space of a CompactibleFreeListSpace
> is maintained in freelists and it is cannot shrink in the simple
> the ContiguousSpaces shrink.  The exception is after a full GC when
> all the free space in the CMS geneartion is in a single chunk at the
> end of the CompactibleFreeListSpace. This change treats the free space
> in the CMS generation like a ContiguousSpace and shrinks it using the
> same policy as many of the other generations.
>
> Move the method compute_new_size() from the TenuredGeneration into
> the CardGeneration when it can be shared with the 
> ConcMarkSweepGeneration.
> Some associated variables are also moved.
>
> Added a compute_new_space_free_list() and associated methods for
> managing the size of the CompactibleFreeListSpace in the CMS generation.
> The method shrink_free_list_by() still does not shrink the CMS 
> generation.
>
> Thanks.




More information about the hotspot-gc-dev mailing list