RFR: 8201436: Replace oop_ps_push_contents with oop_iterate and closure

Stefan Johansson stefan.johansson at oracle.com
Mon Oct 8 12:58:53 UTC 2018

Hi Leo,

Thanks for taking on this task.

On 2018-10-04 18:20, Leo Korinth wrote:
> Hi!
> This is the first enhancement in a series of three to remove Parallel GC 
> specific behaviour from shared code. I will post all three enhancements 
> to the mailing list.
> JDK-8201436 Replace oop_ps_push_contents with oop_iterate and closure
>              https://bugs.openjdk.java.net/browse/JDK-8201436
> JDK-8211446 Replace oop_pc_follow_contents with oop_iterate and closure
>              https://bugs.openjdk.java.net/browse/JDK-8211446
> JDK-8211447 Replace oop_pc_update_pointers with oop_iterate and closure
>              https://bugs.openjdk.java.net/browse/JDK-8211447
> The webrevs are to be applied in the same order as in the above list 
> although logically they are quite independent of each other.
> The aim is to remove Parallel GC specific behaviour by removing 
> oop_ps_push_contents, oop_pc_follow_contents and oop_pc_update_pointers 
> from the *Klass hierarchy in oops/*Klass.hpp. Instead of using the old 
> dynamic dispatch on the Klass object, the generic oop_iterate* (used by 
> all other GCs) is used instead.
> Improvements include:
> - removing GC specific implementation from shared code. Better 
> separation, less #ifdefs
> - reusing the same iterators everywhere, using the same mechanism to 
> iterate in the different GCs
> - reduction in code
> Performance:
> Most of the benchmarks looks good, they show about the same performance 
> before and after the changes. I have had serious problems with the Derby 
> benchmark that did not like the way the generic reference handling was 
> visiting objects. Changing the order in oop_oop_iterate_reverse 
> introduced regressions in G1. Therefore I have added new 
> oop_oop_iterate_reverse specialisations to speed up Parallel (reduce 
> regression) without harming G1.
> Ideas of things to do after this commit series:
> - minor improvements in oop_oop_iterate_reverse (removing return of size 
> that is not used anywhere)
> - remove dynamic dispatch call to check if klass is of typeArray "kind" 
> (!obj->klass()->is_typeArray_klass()). The empty action on type arrays 
> is already handled and this extra check seems mostly confusing and 
> possibly a small unnecessary cost.
> - possibly move creation of push closure out of push_contents, and by 
> that win some performance (the new closure now has to set a reference 
> processor)
> Enhancement:
> https://bugs.openjdk.java.net/browse/JDK-8201436
> Webrev:
> http://cr.openjdk.java.net/~lkorinth/8201436/00/

The change looks good.


> Testing:
> - all patches build on linux.
> - mach5 (linux, windows and mac) tier1,tier2,tier3,tier4,tier5 has 
> passed with all three patches applied
> - aurora tests have been run and seem to indicate no change in general, 
> and only a small regression in Derby. The last (Derby) run showed a 
> young collection regression of 1.02% on Linux and 2.76% improvement on 
> windows, but including experience from earlier runs, my estimate is that 
> it is in reality a bit worse and that we have a _slight_ but acceptable 
> regression in Derby. >
> Thanks, Leo

More information about the hotspot-gc-dev mailing list