RFR (S): 8067469: G1 ignores AlwaysPreTouch

Erik Helin erik.helin at oracle.com
Wed Dec 17 09:24:15 UTC 2014


On 2014-12-16, Thomas Schatzl wrote:
> Hi Erik,
> 
>   thanks for the review.
> 
> On Tue, 2014-12-16 at 16:29 +0100, Erik Helin wrote:
> > On 2014-12-16, Thomas Schatzl wrote:
> > > Hi all,
> > > 
> > >   can I have reviews for the following small change?
> > > 
> > > It adds pre-touching of allocated memory in G1, which has been forgotten
> > > to be implemented when changing this code in JDK-8038423.
> > > 
> > > This change adds this and refactors the pre-touch code to a single
> > > method in the os class.
> > > 
> > > CC'ed runtime since it changes code in os.hpp/cpp.
> > > 
> > > CR:
> > > https://bugs.openjdk.java.net/browse/JDK-8067469
> > > Webrev:
> > > http://cr.openjdk.java.net/~tschatzl/8067469/webrev/
> > 
> > First of all, nice patch, I really like the introduction of
> > os::pretouch_memory. I have one question about the patch: the code you
> > removed in virtualspace.cpp did:
> > 
> >   *curr = 0;
> > 
> > whereas the new code you added in os::pretouch_memory does:
> > 
> >   char t = *p; *p = t;
> > 
> > Was this change intended or should os::pretouch_memory also write 0?
> > 
> 
> There is no code relying on particular values written. Pre-touch is done
> as part of committing new memory. So in effect, the code reads a zero,
> and writes it back.
> 
> It's just that there were two different pre-touching implementations and
> I chose one of them to factor out into the new method.

Ok, I see, thanks for the explanation. If it doesn't matter if we use
"*p = 0" or "char t = *p; *p = t", would you mind using "*p = 0"? I
immediately understand what "*p = 0" does whereas with
"char t = *p; *p = t" I have to think for a second :)

Thanks,
Erik

> Thanks,
>   Thomas
> 
> 


More information about the hotspot-gc-dev mailing list