RFR: 8075957: Reduce calls to the GC specific object visitors in oopDesc

Stefan Karlsson stefan.karlsson at oracle.com
Wed Mar 25 15:02:40 UTC 2015


Hi,

Please review this refactoring patch:
  http://cr.openjdk.java.net/~stefank/8075957/webrev.01/
  https://bugs.openjdk.java.net/browse/JDK-8075957

Some of our GCs have GC specific entry points and code placed in the 
oopDesc and Klass files. They are used to implement marking, scavenging 
and adjusting of oops in the the objects. See the following functions:

Mark Sweep:
   void follow_contents(void);
   int adjust_pointers();

Parallel Scavenge
   void push_contents(PSPromotionManager* pm);

Parallel Old
   void update_contents(ParCompactionManager* cm);
   void follow_contents(ParCompactionManager* cm);

With JDK-8075955 we'll start to use parts of the oop_oop_iterate 
framework to implement these functions, and as a preparation patch I'd 
like to minimize the number of places where these functions are directly 
called from Mark Sweep, Parallel Scavenge and Parallel Old.

The proposal is to add thin wrapper functions to the three GCs, and let 
these wrappers be the only callers of the functions above.


Detailed description of the patch:

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp.udiff.html
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp.udiff.html
- Wrapper declarations

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp.udiff.html
- Wrapper definitions

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp.udiff.html
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed
- Call to GC wrapper function
- Moved definition of do_addr since it was only used in the .cpp, placed 
in the .hpp file, and used other .inline.hpp files.

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp.udiff.html
- Moved definition of do_addr since it was only used in the .cpp, placed 
in the .hpp file, and used other .inline.hpp files.
- Removed dead code (follow_root) that referred to one of the object 
visitors.

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp.udiff.html
- Wrapper declaration

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp.udiff.html
- Wrapper declarations
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/shared/markSweep.cpp.udiff.html
- Wrapper definition
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/shared/markSweep.hpp.udiff.html
- Wrapper declarations

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/gc_implementation/shared/markSweep.inline.hpp.udiff.html
- Wrapper definitions

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/memory/space.inline.hpp.udiff.html
- Call to GC wrapper function

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/oops/instanceClassLoaderKlass.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/oops/instanceKlass.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/oops/instanceMirrorKlass.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/oops/instanceRefKlass.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

http://cr.openjdk.java.net/~stefank/8075957/webrev.01/src/share/vm/oops/objArrayKlass.cpp.udiff.html
- Include of oop.pcgc.inline.hpp not needed

No copyright years have been updated.

Thanks,
StefanK




More information about the hotspot-gc-dev mailing list