RFR: 8200729: Conditional compilation of GCs
Stefan Karlsson
stefan.karlsson at oracle.com
Thu May 3 13:29:21 UTC 2018
On 2018-05-03 15:19, Erik Helin wrote:
> On 05/02/2018 04:37 PM, Stefan Karlsson wrote:
> > Hi all,
>
> Hi Stefan,
>
> thanks for taking on this work, much appreciated!
>
> On 05/02/2018 04:37 PM, Stefan Karlsson wrote:
> > The first patch simply cleans up some INCLUDE_ALL_GCS usages in
> platform-specific files. Some of these changes are already being cleaned
> up by other RFEs:
> >
> >
> http://cr.openjdk.java.net/~stefank/8200729/webrev.04/00.removeUnneededIncludeAllGCs/
>
>
> Looks good, Reviewed.
>
> On 05/02/2018 04:37 PM, Stefan Karlsson wrote:
> > The second patch pre-cleans some include files:
> >
> > http://cr.openjdk.java.net/~stefank/8200729/webrev.04/01.fixIncludes/
>
> Also looks good, Reviewed.
>
> On 05/02/2018 04:37 PM, Stefan Karlsson wrote:
> > The following is the main patch, which include all relevant HotSpot
> changes. For a while now, we have been actively working on abstracting
> away GC specific code from non-GC directories, but as can be seen in
> this patch, there are still a few places left. Hopefully, we will get
> rid of most of these in the near future.
> >
> > http://cr.openjdk.java.net/~stefank/8200729/webrev.04/02.mainPatch/
>
> Very nice, just one small nit:
>
> - barrierSetConfig.hpp:
> could you move "+ G1GC_ONLY(f(G1BarrierSet))" into
> FOR_EACH_CONCRETE_BARRIER_SET_DO ? As in
>
> // Do something for each concrete barrier set part of the build.
> #define FOR_EACH_CONCRETE_BARRIER_SET_DO(f) \
> f(CardTableBarrierSet) \
> G1GC_ONLY(f(G1BarrierSet))
>
Yes. That's better.
> As a note for people following along this thread (and to a future
> version of myself), the following work is ongoing to further clean up
> the GC specific bits and pieces sprinkled throughout the rest of the VM:
> - 8202377: Modularize C2 GC barriers
> - 8202547: Move G1 runtime calls used by generated code to
> G1BarrierSetRuntime
> - 8201436: Replace oop_ps_push_contents with oop_iterate and closure
>
> In addition to the above work, this patch highlights a few more places
> that needs to be taken care of:
> - get rid of #if INCLUDE_CMS in defNewGeneration.cpp
> - split collector specific parts of gcTrace.hpp into collector
> specific tracers
> - rework Threads::create_thread_roots_tasks into something more generic
> that parallel then can use to implement its own
> create_thread_roots_task
> - remove marksweep_init() and set up MarkSweep::_gc_timer and
> MarkSweep::_gc_tracer in SerialHeap and ParallelScavengeHeap
> - benchmark (and measure file sizes) to see if it is still worthwhile to
> keep the INCLUDE_OOP_OOP_ITERATE_BACKWARDS guard (i.e. can we always
> compile the oop_iterate_backwards methods?)
> - need to do some work to encapsulate the G1 and CDS code
> (see e.g. oop.cpp, metaspaceShared.cpp and file.cpp)
> - move VM_CollectForMetadataAllocation::initiate_concurrent_GC to
> something like
> CollectedHeap::initiate_concurrent_GC_for_metadata_allocation
> (preferably with a shorter name
>
> (the above list is _not_ complete, there will always be a need for
> cleanups :D)
I agree.
>
> > The last patch adds the make file support to turn on and off the
> different GCs. The content of this patch has evolved from versions
> written by myself, Per, and Magnus Ihse Bursie. Magnus last proposed
> version used the names gc-cms, gc-g1, gc-parallel, and gc-serial, but
> I've changed them to cmsgc, g1gc, parallelgc, and serialgc, so that they
> match the INCLUDE_<GC> defines.
> >
> >
> http://cr.openjdk.java.net/~stefank/8200729/webrev.04/03.selectIndivudualGCsMakePatch/
>
>
> My Makefile knowledge is limited to smaller hacks, I will leave this
> patch for Magnus to review (which I see he already has done).
>
> Overall, very nice work Stefan, thanks!
Thanks Erik!
StefanK
> Erik
More information about the build-dev
mailing list