jdk 9 performance optimizations

Rémi Forax forax at univ-mlv.fr
Thu Nov 12 08:20:23 UTC 2015


Hi Christian, 

Le 11 novembre 2015 19:58:30 CET, Christian Thalinger <christian.thalinger at oracle.com> a écrit :
>
>> On Nov 5, 2015, at 10:58 PM, Jeroen Borgers <jborgers at jpinpoint.com>
>wrote:
>> 
>> Hi Christian,
>> 
>> Thanks for the clarification, I over-simplified. Can you please shed
>some
>> light on my questions? How can jigsaw help with AOT, inlining
>lambda’s?
>
>I think the text you are quoting is more a blanket statement of what
>could be done.  Some of the listed optimizations might even be done on
>a class file level.
>
>One area where JDK 9 can help is if all classes (JDK and application)
>are bundled together AOT compilation can optimize more optimistically. 
>Of course dynamic class loading can break all assumptions but that’s
>another story.

If your application is a trading application you don't want your application to dynamically load an unknown class.

My opinion is that the AOT should come with a flag les say 'closed world'  that throw an exception if an unknown class force the runtime to go to a deopt.

cheers,
Rémi

>
>> I did my jug talk already yesterday, yet, I am curious.
>> Thanks!
>> 
>> Jeroen
>> 
>> 2015-11-05 21:27 GMT+01:00 Christian Thalinger <
>> christian.thalinger at oracle.com>:
>> 
>>> 
>>>> On Nov 3, 2015, at 12:26 PM, Jeroen Borgers
><jborgers at jpinpoint.com>
>>> wrote:
>>>> 
>>>> I posted in jigsaw-dev list before:
>>>> 
>>>> I found this interesting presentation "Java goes AOT" from JVM
>Language
>>>> Summit: https://www.youtube.com/watch?v=Xybzyv8qbOc
>>>> 
>>>> As presented by Christiaan Thalinger from HS compiler team, AOT is
>used
>>>> with Graal to reduce startup time and quicker peakperformance
>(tiered).
>>>> Currently they don't do any inlining in AOT yet
>>> 
>>> That’s not accurate; we do inlining but very limited.
>>> 
>>>> because compilation time
>>>> blows up by inlining everything since no profiling information is
>>> available
>>>> yet. I guess modules and knowing dependencies can help here to
>reduce
>>> this.
>>>> Besides test running to generate profiling data.
>>>> 
>>>> Regards, Jeroen
>>>> Bijlagen
>>>> Voorbeeld van YouTube-video JVMLS 2015 - Java Goes AOT weergeven
>>>> JVMLS 2015 - Java Goes AOT
>>>> Vitaly Davidovich
>>>> 13:09 (10 uur geleden)
>>>> aan Jeroen, jigsaw-dev
>>>> 
>>>> Yes, I had seen Chris' presentation as well.  Certainly
>modularization
>>> will
>>>> help AOT in many ways.  But, I'm particularly interested on the JIT
>side.
>>>> What was meant by aggressive lambda inlining, for example? Can
>anyone
>>> point
>>>> at some additional info?
>>>> 
>>>> Thanks
>>>> 
>>>> sent from my phone
>>>> Paul Sandoz <paul.sandoz at oracle.com>
>>>> 13:32 (9 uur geleden)
>>>> aan jigsaw-dev
>>>> Hi Vitaly,
>>>> 
>>>> Probably worth sending an email to the hotspot-dev at openjdk.java.net
>>> <mailto:
>>>> hotspot-dev at openjdk.java.net>
>>>> 
>>>>> On 3 Nov 2015, at 13:09, Vitaly Davidovich <vitalyd at gmail.com>
>wrote:
>>>>> 
>>>>> Yes, I had seen Chris' presentation as well.  Certainly
>modularization
>>>> will
>>>>> help AOT in many ways.  But, I'm particularly interested on the
>JIT
>>> side.
>>>>> What was meant by aggressive lambda inlining, for example? Can
>anyone
>>>> point
>>>>> at some additional info?
>>>>> 
>>>> 
>>>> I presume it in part might relate to cracking open the lambda “box”
>>>> implementing the targeted functional interface to obtain the
>underlying
>>>> method containing the lambda body, generated by javac, that the box
>>> defers
>>>> to, then subsituting the indy call to an invocation of that
>underlying
>>>> method. Cue lots of hand waving…
>>>> 
>>>> Maybe more clues in Oleg Pliss’s Closures on Embedded JVM
>presentation at
>>>> JVMLS 2014:
>>>> 
>>>> http://www.oracle.com/technetwork/java/jvmls2014pliss-2265210.pdf <
>>>> http://www.oracle.com/technetwork/java/jvmls2014pliss-2265210.pdf>
>>>> --------
>>>> 
>>>> Thanks,
>>>> 
>>>> Jeroen
>>>> 
>>>> 2015-11-03 23:21 GMT+01:00 Jeroen Borgers <jborgers at jpinpoint.com>:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> One of the goals of Jigsaw that intrigue me, I read here:
>>> http://openjdk.
>>>>> java
>>>>> 
>>>
>.net/projects/jigsaw/goals-reqs/03#enable-ahead-of-time-whole-program-optimization-techniques
>>>>> is:
>>>>> *Enable ahead-of-time, whole-program optimization techniques*  -
>>>>> [..]
>>>>> The optimization techniques envisioned here include, but are not
>limited
>>>>> to: Fast lookup of both JDK and application classes; early
>bytecode
>>>>> verification; aggressive inlining of, *e.g.*, lambda expressions,
>and
>>>>> other standard compiler optimizations; construction of
>JVM-specific
>>> memory
>>>>> images that can be loaded more efficiently than class files;
>>> ahead-of-time
>>>>> compilation of method bodies to native code; and the removal of
>unused
>>>>> fields, methods, and classes. These kinds of techniques tend to
>work
>>> best
>>>>> when JDK and application code is analyzed together, prior to run
>time.
>>>>> [..]
>>>>> 
>>>>>  -
>>>>> 
>>>>>  *Optimize existing code as-is* — It must be possible to apply the
>>>>>  optimizer tool to existing code already packaged in traditional
>jar
>>> files,
>>>>>  without changing those files.
>>>>>  -
>>>>> 
>>>>>  *Actual optimizations* — As a proof of concept, provide at least
>two
>>>>>  optimizations that deliver nontrivial performance benefits.
>>>>> 
>>>>> I am curious about the following:
>>>>> * What is the current state of this? Which
>techniques/optimizations are
>>>>> already implemented and available from the current ea JDK9 or will
>be?
>>>>> * Are there any new insights/developments in this area?
>>>>> * I noticed in my JMH microbenchmark with parallel stream and
>lambda's
>>>>> that it runs slightly faster on 9_b85 compared to 8_u66. Could
>this be
>>>>> caused by more aggressive inlining of lambda's?
>>>>> * It seems to me that some compilation and optimization work is
>moved
>>> from
>>>>> runtime to link time /AOT time, yet, we don't have profiling
>information
>>>>> there, so this will be limited, right? Are there obvious cases
>which
>>> work
>>>>> well?
>>>>> * I don't really see why aggressive inlining and std optimizations
>can
>>> now
>>>>> be more effective. Because there will be less de-optimization
>events
>>> needed
>>>>> because of better predictability? Can in-lining now take place in
>two
>>> ways,
>>>>> between platform modules and application? Through interfaces?
>>>>> 
>>>>> Thanks!
>>>>> Jeroen
>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 



More information about the hotspot-dev mailing list