RFR: Some patches for sherman

Martin Buchholz martinrb at google.com
Fri Mar 30 22:49:25 UTC 2018


The qualified people may not be reading this mailing list.  Adding
authors/reviewers of Stable.java.  The question is whether in


final ZipFile z = ...
while (...) {
  use(z.res);
}


annotating instance field ZipFile.res as @Stable will enable the
optimization of reading the res field only once.


On Fri, Mar 30, 2018 at 1:16 AM, Peter Levart <peter.levart at gmail.com>
wrote:

> I'm forwarding this private message to core-libs-dev so a qualified person
> may read it...
>
> Regards, Peter
>
>
> -------- Forwarded Message --------
> Subject:        Re: RFR: Some patches for sherman
> Date:   Fri, 30 Mar 2018 06:18:26 +0000
> From:   Peter Levart <peter.levart at gmail.com>
> To:     Martin Buchholz <martinrb at google.com>
>
>
>
> Hi Martin,
>
> On Fri, 30 Mar 2018, 05:28 Martin Buchholz, <martinrb at google.com <mailto:
> martinrb at google.com>> wrote:
>
>
>
>    On Thu, Mar 29, 2018 at 7:57 AM, Peter Levart
>    <peter.levart at gmail.com <mailto:peter.levart at gmail.com>> wrote:
>
>        Hi Martin,
>
>        On 03/27/2018 02:21 AM, Martin Buchholz wrote:
>
>>         8200124: Various cleanups in jar/zip
>>         http://cr.openjdk.java.net/~martin/webrevs/jdk/zip-cleanup/
>>         <http://cr.openjdk.java.net/%7Emartin/webrevs/jdk/zip-cleanup/>
>>         https://bugs.openjdk.java.net/browse/JDK-8200124
>>
>
>        As I already mentioned for your Thread cleanup patch, do you
>        think that ZipFile objects are something that ever gets assigned
>        to static final or @Stable fields? Only in that case would
>        @Stable have any effect for ZipFile fields. @Stable should
>        really be reserved for classes which instances are normally
>        assigned to static final fields, such as ThreadLocal,
>        ClassValue, etc... If the holder of the @Stable field can not be
>        made constant, then neither can the value of that field.
>
>
>    Peter, I was very surprised by your reply.  I re-read the doc for
>    Stable and it says to me that in
>
>    ZipFile z = ...
>
>    while (...) {
>       z.res ...
>    }
>
>    z.res only needs to be read once.
>
>
> This is true even without @Stable on res field. And JIT already does all
> it can without it. What JIT cannot do in above situation is make the value
> of res a compile-time constant embedded in generated code, possibly
> triggering other optimizations that arrise from the value of the field. And
> the reason is not the absense of @Stable but the fact that ZipFile instance
> can not be prooved to be constant.
>
>
>    If hotspot only optimizes @Stable for static fields, I would regard
>    that as a bug.
>    Only being able to optimize static fields is not very useful.
>
>
> It optimizes (constant-folds) @Stable static fields and @Stable instance
> fields for which it can proove that the holder object can not change during
> the lifetime of generated code. In practice this means that there has to be
> a chain of @Stable fields leading to optimized value, rooted at some static
> final or static @Stable field.
>
> Maybe the same optimization could also be applied for locals that are
> accessed in a loop for which the JIT could proove that it never ends or if
> it ends that the generated code is deoptimized. But I doubt this is what
> current JIT does. In your ZipFile case this would mean JIT would be
> generating separate code blob for each ZipFile instance.
>
> All above is just a speculation and how I understand the @ Stable
> amnotation. Someone more qualified could chime-in clear things a bit.
>
> Regards, Peter
>
>
>
>
>


More information about the core-libs-dev mailing list