RFR (M): 8035406: Improve data structure for Code Cache remembered sets

Mikael Gerdin mikael.gerdin at oracle.com
Tue Feb 25 10:20:44 UTC 2014


Hi,

On Tuesday 25 February 2014 10.42.35 Thomas Schatzl wrote:
> Hi,
> 
>   thanks for the review...
> 
> On Mon, 2014-02-24 at 16:57 +0100, Mikael Gerdin wrote:
> > Thomas,
> > 
> > On Monday 24 February 2014 12.40.10 Thomas Schatzl wrote:
> > > Hi all,
> > > 
> > >   can I have reviews for this split-out from 8027295? It changes the
> > > 
> > > code cache remembered set data structure from a GrowableArray to a set
> > > of chunks of nmethods.
> > > 
> > > 
> > > Bug CR:
> > > https://bugs.openjdk.java.net/browse/JDK-8035406
> > > 
> > > Webrev:
> > > http://cr.openjdk.java.net/~tschatzl/8035406/webrev/
> >  
> >  845 HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
> >  846                                    HeapRegion* hr)
> >  847   : _bosa(bosa), _m(Mutex::leaf, "An OtherRegionsTable lock", true),
> >  848     _code_roots(), _other_regions(hr, &_m) {
> >  849   reset_for_par_iteration();
> >  850 }
> > 
> > Since the mutex is no longer only covering the OtherRegionsTable, should
> > it be renamed to "HeapRegionRemSet lock"?
> > Also, it appears that the Mutex constructor actually copies the name
> > string
> > into the Mutex object, so we can format the string with whatever contents
> > we want, such as "HeapRegionRemSet lock for region #4711" without
> > increasing footprint.
> 
> Fixed. That required some minor changes to other code though that
> manages the mutex.

Ok, I was thinking something more along the lines of:

_m(Mutex::leaf, FormatBuffer("HeapRegionRemSet lock #"UINT32_FORMAT, hr-
>hrs_index()), true),

FormatBuffer is the same class being used by err_msg used in asserts and has a 
char* conversion operator, it encapsulates the char[] and snprintf call so you 
don't need to worry about it.

> 
> >   34 class G1CodeRootChunk : public CHeapObj<mtGC> {
> >   35 private:
> >   36   static const int num_entries = 32;
> > 
> >   37 public:
> > The private/public declarations are incorrectly indented.
> 
> A small survey through the code reveals:
> 
> 332:43 in the g1 directory for no space/one space
> 430:467 across the gc_implementation directory and
> 3383:1861 across the VM
> 
> (numbers are approximate)
> 
> I added the space. I do not really care although my IDE prefers to use
> zero spaces.

In that case I don't really care either way, I thought it was more consistent.

> 
> >   49   nmethod** top() const {
> >   50     return (nmethod**) &(_data[num_entries]);
> >   51   }
> > 
> > Top usually denotes the "current allocation point" in the rest of the GC
> > code, I'm fine with you calling that variable _alloc_next instead but
> > please rename this to end() to be consistent with the terminology in the
> > rest of the code.
> I changed the terminology to bottom()/top()/end() as in the other places
> (I think).

Thanks

/Mikael

> 
> >  133 class G1CodeRootSet {
> > 
> > Add VALUE_OBJ_CLASS_SPEC to inherit ValueObj.
> 
> Done
> 
> >  174
> >  175  void nmethods_do(CodeBlobClosure* blk) const;
> >  176
> > 
> > The indent is just one space here.
> 
> Fixed
> 
> >  288   experimental(uintx, G1CodeRootsChunkCacheKeepRatio, 10,
> >  289           "The amount of code root chunks that should be kept at most
> >  "
> >  290           "as percentage of already allocated.")
> > 
> > Shouldn't this be Percent instead of Ratio if it's a percent value? I know
> > we've other flags which are incorrectly named but "the real" ratios such
> > as
> > NewRatio and SurvivorRatio are not percent values at all.
> 
> Fixed
> 
> New webrev at
> http://cr.openjdk.java.net/~tschatzl/8035406/webrev.1/
> 
> Testing:
> jprt
> 
> Thanks,
>   Thomas




More information about the hotspot-gc-dev mailing list