RFR: 8198505: Remove CollectorPolicy and its subclasses

Stefan Karlsson stefan.karlsson at oracle.com
Thu Apr 25 09:06:31 UTC 2019


Hi all,

I realized that I had turned off the CollectoryPolicy gtest. Fixed it with:
  http://cr.openjdk.java.net/~stefank/8198505/webrev.02.delta/
  http://cr.openjdk.java.net/~stefank/8198505/webrev.02/

I didn't change the name of the test, to make it easier to review. So, 
either I rename it before pushing, or I remove it if we don't think it's 
worth keeping.

Thanks
StefanK

On 2019-04-17 14:53, Stefan Karlsson wrote:
> Hi all,
> 
> Please review this patch to remove CollectorPolicy and its subclasses.
> 
> https://cr.openjdk.java.net/~stefank/8198505/webrev.01/
> https://bugs.openjdk.java.net/browse/JDK-8198505
> 
>  From the RFE:
> ==========
> I'd like to propose that we get rid of the CollectorPolicy classes.
> 
> The CollectorPolicy classes contains a mix of features to support the 
> CollectedHeaps. A few of them are:
> 
> * Have virtual functions that either CMS or Serial can override. This 
> was important when CMS didn't have it's own CollectedHeap. But CMSHeap 
> was recently added, so this isn't needed anymore.
> 
> * Has common allocation code for CMS and Serial. Can be moved to 
> GenCollectedHeap.
> 
> * Deal with parts of the heap sizing and corresponding flags. A lot of 
> the flag handling has been moved to the GCArguments classes. We should 
> move the CollectorPolicy flag handling functions there as well.
> 
> * Keeps the state for the SoftRefPolicy. Separate this out to it's own 
> class.
> 
> * Has the satisfy_failed_metadata_allocation function. No need to be 
> located in CollectorPolicy.
> ==========
> 
> I started this work last year and have already pushed a number of sub RFEs:
>   JDK-8198373: Remove CollectorPolicy::is/as functions
>   JDK-8198507: Remove CollectorPolicy::create_rem_set
>   JDK-8198509: Move satisfy_failed_metadata_allocation out from 
> CollectorPolicy
>   JDK-8198511: Move allocation functions from GenCollectorPolicy to 
> GenCollectedHeap
>   JDK-8198515: Extract SoftReferencePolicy code out of CollectorPolicy
>   JDK-8198525: Move _size_policy out of GenCollectorPolicy into 
> GenCollectedHeap
>   JDK-8198528: Move GenerationSpecs from GenCollectorPolicy to 
> GenCollectedHeap
>   JDK-8198530: Move _gc_policy_counters from GenCollectorPolicy to 
> GenCollectedHeap
> 
> This patch removes the last bits. It mainly moves flag handling and 
> sizing information over to the GCArguments. Most of the gc flag handling 
> has already been moved there, so it makes sense to move the rest over to 
> that sub-system.
> 
> For Shenandoah I only moved the flag handling code, but left the 
> ShenandoahCollectorPolicy class as a Shenandoah internal implementation 
> detail.
> 
> Some GCs perform the initialization a little bit differently than 
> others. For example:
> - Parallel runs some initialization code twice
> - Some simply uses the default initialize_heap_flags_and_sizes, while 
> others override it.
> - G1 and Shenandoah needs the heap size before alignments can be set up.
> 
> The last item is a bit awkward because there's a circular dependency 
> between figuring out the heap size and the heap region size. We have 
> this initialization sequence:
> 
> void GCArguments::initialize_before_create_heap() {
>    initialize_alignments();
>    initialize_heap_flags_and_sizes();
>    initialize_size_info();
> }
> 
> Today G1 and Shenandoah sets up the heap region sizes in 
> initialize_alignments, to overcome this circular dependencies. There 
> might an opportunity for further cleanups in this area.
> 
> Tested with tier1-3 and tier1-7 on Linux x64.
> 
> Thanks,
> StefanK



More information about the hotspot-gc-dev mailing list