RFR (M): 8146987: Improve Parallel GC Full GC by caching results of live_words_in_range() [Was: Re: [PATCH] enhancement to ParallelScavenge Full GC]

Thomas Schatzl thomas.schatzl at oracle.com
Mon Jan 25 11:51:44 UTC 2016


Hi,

----- jon.masamitsu at oracle.com wrote:

> On 1/15/2016 3:43 AM, Thomas Schatzl wrote:
> > Hi all,
> >
> > On Thu, 2016-01-14 at 13:04 -0800, Jon Masamitsu wrote:
> >>
> http://cr.openjdk.java.net/~tschatzl/8146987/webrev.1/src/share/vm/gc
> >> /parallel/psCompactionManager.hpp.frames.html
> >>
> >> Please initialize these in the constructor
> >>
> >> 112 HeapWord* _last_query_beg;
> >> 113 oop _last_query_obj;
> >> 114 size_t _last_query_ret;
> >>
> >>
> http://cr.openjdk.java.net/~tschatzl/8146987/webrev.1/src/share/vm/oo
> >> ps/oop.hpp.udiff.html
> >>
> >> Any reason to use "pc" as the parameter name here and
> >> not "cm" as is used elsewhere?
> >>
> >> - void pc_update_contents();
> >> + void pc_update_contents(ParCompactionManager* pc);
> >>
> >    new webrevs (also including Mikael's comments) at
> >
> > http://cr.openjdk.java.net/~tschatzl/8146987/webrev.2/ (full)
> > http://cr.openjdk.java.net/~tschatzl/8146987/webrev.1_to_2/ (diff)
> 
> Patch looks good.  If you decide to add the comment I suggested
> (off-line) for  ParMarkBitMap::live_words_in_range_use_cache(), I don't
> need a new webrev.

Just fyi, here is the suggested diff for the comment:

--- a/src/share/vm/gc/parallel/parMarkBitMap.cpp	Wed Jan 20 13:15:11 2016 +0100
+++ b/src/share/vm/gc/parallel/parMarkBitMap.cpp	Mon Jan 25 12:49:08 2016 +0100
@@ -141,6 +141,8 @@
     last_ret = last_ret + live_words_in_range_helper((HeapWord*)last_obj, end_obj);
     last_obj = end_obj;
   } else if (end_obj < last_obj) {
+    // The cached value is for an object that is to the left (lower address) of the current
+    // end_obj. Calculate back from that cached value.
     if (pointer_delta((HeapWord*)end_obj, (HeapWord*)beg_addr) > pointer_delta((HeapWord*)last_obj, (HeapWord*)end_obj)) {
       last_ret = last_ret - live_words_in_range_helper((HeapWord*)end_obj, last_obj);
     } else {

I will push this as soon as the repo is open again.

Thanks everyone,
  Thomas



More information about the hotspot-gc-dev mailing list