RFR (M) 8138762: Refactor setup of evacuation closures in G1
Erik Helin
erik.helin at oracle.com
Fri Oct 9 13:44:30 UTC 2015
On 2015-10-08, Mikael Gerdin wrote:
> Hi Erik,
>
> On 2015-10-06 15:36, Erik Helin wrote:
> >Hi Mikael,
> >
> >first of all, thanks for a really nice patch! I think the patch
> >essentially is good to go, just a few comments inline.
> >
> >On 2015-10-02, Mikael Gerdin wrote:
> >>I've split the change into two different webrevs.
> >>The first one moves a bunch of code out from g1CollectedHeap.cpp to become
> >>externally visible.
> >>I also noticed that g1CodeBlobClosure.hpp is missing include guards.
> >>To make room for the closure set in the par scan state I remove the unused
> >>g1 rem set pointer in this first webrev.
> >>
> >>http://cr.openjdk.java.net/~mgerdin/8138762_1/webrev.0/
> >
> >Looks good, Reviewed.
> >
> >>The second webrev contains the actual change.
> >>I decided to separate the interface headers and the actual implementations
> >>of the closure sets in two separate files.
> >>g1RootClosureSet.hpp contains the interface and g1EvacuationClosures.hpp
> >>contains the implementations used by a G1 evacuation pause.
> >>
> >>http://cr.openjdk.java.net/~mgerdin/8138762_2/webrev.0/
> >
> >- g1CollectedHeap.cpp:
> > The variable trace_metadata can be initialized with the
> > expression:
> > `bool trace_metadata =
> > _g1h->collector_state()->during_initial_mark_pause() &&
> > ClassUnloadingWithConcurrentMark;`
>
> Ok.
>
> >
> >- g1RootProcessor.cpp:
> > Could you update the assert comments for:
> > + assert(closures->second_pass_weak_clds() != NULL, "should be
> > null");
> > + assert(closures->second_pass_weak_clds() == NULL, "should not
> > null");
>
> Oops, yes of course.
>
> >
> >- g1RootClosureSet.hpp:
> > Could you rename the interface (and the file) to g1RootClosures?
> > Correspondingly, rename G1EvacuationRootClosureSet to
> > G1RootEvacuationClosures?
>
> We agreed on G1EvacuationRootClosures.
>
> >
> >- g1EvacuationClosures.hpp:
> > Rename G1ClosureSet to G1SharedClosures?
> > I'm not too fond of having comments before bool arguments,
> > like /* process_only_dirty_klasses */. Personally I would remove them,
> > but if you want to keep them, that is fine by me as well.
>
> I renamed G1ClosureSet, I'd prefer to keep the comments because otherwise
> the code is hard to follow, especially since the shared closures constructor
> uses two different booleans.
>
> I also noticed that accidentally passed the wrong closure to
> ref_processor_cm()->weak_oops_do. That shouldn't actually matter since the
> strong vs weak differentiation is only relevant during initial mark (and at
> that point the CM ref processor should not have discovered any references)
> but I'd prefer to maintain the same semantics instead of cleaning that up at
> this point.
>
>
> Incremental webrev at:
> http://cr.openjdk.java.net/~mgerdin/8138762_2/webrev.0_to_1/
>
> Full webrev at:
> http://cr.openjdk.java.net/~mgerdin/8138762_full/webrev.1/
Looks good, Reviewed.
Thanks,
Erik
> /Mikael
>
> >
> >Thanks,
> >Erik
> >
> >>The full webrev is available at:
> >>http://cr.openjdk.java.net/~mgerdin/8138762_full/webrev.0/
> >>
> >>Testing:
> >>JPRT
> >>Performance (aurora.se G1 workloads on Solaris x64)
> >>Kitchensink,runThese,vm.gc.testlist,vm.g1classunload.testlist
> >>
> >>I appreciate any feedback, if you have suggestions for different class names
> >>I'm happy to change them, I had some trouble coming up with good ones.
> >>
> >>Thanks
> >>/Mikael
>
More information about the hotspot-gc-dev
mailing list