Review request for JDK-8043956: Make code caching work with optimistic typing and lazy compilation
Hannes Wallnoefer
hannes.wallnoefer at oracle.com
Mon Aug 4 17:00:47 UTC 2014
Hi Marcus, answers inline.
Am 2014-08-04 um 18:20 schrieb Marcus Lagergren:
> Hi Hannes!
>
> I get the general gist of this and it looks nice. Some questions
> though, which I probably ask because I am sunstruck by the 33 C in my
> house. I don’t understand all parts of the change, but I do understand
> it architecturally fine.
> No particular priority or size order of questions below:
>
> —8<--
>
> Why is the project.properties diff empty?
Removed trailing whitespace
>
> What is the rationale of removing CompiledFunctions? I’m going to have
> some merge issues with this in my optimistic native code branch, but
> no biggies. Just curious as to how the model works instead. Is it just
> because it would add more serialization problems that it went away and
> turned into a list in ScriptFunctionData?
The purpuse is just to simplify the code, which moved to either
ScriptFunctionData or CompiledFunction. The idea is just to have
>
> You’ve got JavaDoc warnings for public methods in
> FunctionInitializer.java
Will fix this.
>
> Please explain the “sourceURLDirective” field.
>
We allow setting the source URL from a //@ or //# comment within the
source. Previously we passed this through the whole compilation as a
separate parameter, which caused lots of noise.
Attila suggested to rename this to "explicitURL" and I did so in my
reworked patch.
> Please explain the “callSiteType” field that has been added to
> CompiledFunction. How was this represented before?
My intention was to add a shortcut for when the callsite type is exactly
the same as when the function was compiled.
> SpillProprerty - you are missing final for initMethodHandles param
Will fix.
>
> CodeStore : missing various finals for code convention
>
> Security anti pattern - you are using implicit toStrings in a
> doPrivileged block in CodeStore. Not sure if the JDK classes being
> toStringed are safe or final, but please check it it’s a problem, or
> generate the string before the doPrivileged.
I'll check this for the next webrev.
> CodeInstaller.java - finals missing
>
> Why are the getters and setters in AccessorProperty now exposed?
> Because SpillProperty needs them for serialisation? Why? Why package
> private and not protected - I guess it’s stronger security so it
> should be fine.
Exactly. I didn't think it needed to be accissible from outside the package.
> What’s the deal with the dropped strict param in
> test/script/trusted/JDK-8006529.js?
The param that was dropped was the sourceURL one. See my response to
"sourceURLDirective" question above.
> Parser / FunctionNode - why has the setSourceURL logic gone - this is
> probably a question I ask because I can’t see 100% of the big picture
> due to heatstroke/slowness/stupidity/being almost 40. I know there’s a
> sourceURLDirective instead, but I am not 100 % on how it works and where
We now set this in source instead of passing it along as separate param.
>
> Type. Isn’t ‘Z’ a better boolean descriptor as it corresponds to what
> it’s called in Java. ‘B’ can be confused with ‘byte’
Agreed.
>
> OptimisticTypesPersistence: protocol.equals(“jar”) ->
> “jar”.equals(protocol) to avoid potential unnecessary NullPointers.
>
> What’s the purpose of the PropertyMapWrapper? Is this just to get
> equals and hashCode for property maps? Not sure why it’s designed this
> way. I do know that it’s been around for a while and isn’t a part of
> this change, but I wanted to ask the question anyway to complete my
> mental model.
>
> Comment to be removed? + // System.err.println("ADDED PROP MAP " +
> System.identityHashCode(object) + " // " + Debug.caller(2, 5));
Already removed.
>
> Compiler: + Map<Integer, FunctionInitializer> functionInitializers; -
> maybe move the field to the top of the file with the other fields.
> Almost didn’t see it
>
> CompilationPhase.java + CompileUnit newUnit =
> compiler.createCompileUnit(sb.toString(), oldUnit.getWeight()); wants
> a final
>
> CodeGenerator - what did we use “initializedFunctionIds” for? Why is
> it no longer needed. Why did we need it before? Why could we even try
> to initialize a function twice?
I had to unify function initialization between eager and on-demand code
and newly compiled and deserialized code, which is why I moved this
functionality out of CodeGenerator and CompileUnit. Actually I don't
think initializedFunctionIds was needed before. I'll check this again
and maybe add an assertion or something.
>
> The FunctionInitializer class frequently confuses me, due to my weak
> brain. I’d like to see a longer descriptive comment, perhaps with a
> simple use case at the top of FunctionInitializer.
Will add this.
Thanks!
Hannes
>
> Architecturally, this looks very good!
> Thanks for bashing your forehead against this one for some time, Hannes!
>
> Regards
> Marcus
>
>
> On 04 Aug 2014, at 15:52, Hannes Wallnoefer
> <hannes.wallnoefer at oracle.com <mailto:hannes.wallnoefer at oracle.com>>
> wrote:
>
>> Please review JDK-8043956: Make code caching work with optimistic
>> typing and lazy compilation:
>>
>> http://cr.openjdk.java.net/~hannesw/8043956/webrev.01/
>> <http://cr.openjdk.java.net/%7Ehannesw/8043956/webrev.01/>
>>
>> Thanks,
>> Hannes
>
More information about the nashorn-dev
mailing list