Fwd: Re: RFR: Some patches for sherman

Peter Levart peter.levart at gmail.com
Fri Mar 30 08:16:56 UTC 2018

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