Another compilation method in java - AOT (Ahead of Time) compilation

Post on 21-Jan-2018

1.577 views 0 download

Transcript of Another compilation method in java - AOT (Ahead of Time) compilation

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

AnothercompilationmethodinJavaAOT(AheadofTime)Compilation

AkihiroNishikawaOracleCorporationJapan

1

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

SafeHarborStatementThefollowingisintendedtooutlineourgeneralproductdirection.Itisintendedforinformationpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfunctionality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andtimingofanyfeaturesorfunctionalitydescribedforOracle’sproductsremainsatthesolediscretionofOracle.

2

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Agenda

JIT(Just-in-Time)Compilation

AOT(Ahead-of-Time)Compilation

Limitations

Summary

1

2

3

4

3

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 4

Inthissession,ImainlycoverHotSpot.

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 5

JIT(JustinTime)Compilation

SourceCode(*.java)

javac

Classfile(*.class)

HotSpot

Compile

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 6

ForimprovementofwarmuptimeTieredcompilation

C1(-client/clientuse) C2(-server/serveruse)

• Longercompilationtimeandlongerstartuptime,butgeneratedcoderunsfaster.

• Heavyoptimization

• Incaseofprioritizingperformanceafterinvocation...

• Shortercompilationtimeandshorterstartuptime,butgeneratedcoderunsslow.

• Lessoptimization

• Incaseofprioritizingstartuptime...

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 7

CompilationLevel

• 4:C2• 0:Interpreter

C2Interpreter C1

• 1:C1fulloptimization(noprofiling)• 2:C1withprofilingaboutinvocationandback-edgeonly• 3:C1fullprofiling(level2+MDO)

1,500 10,000

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

AOT– AheadOfTimecompilation•Generatenativecodeinadvance

• JEP295

•BasedonGraal

8

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 9

AOTCompilation

SourceCode(*.java)

javac

Classfile(*.class)

HotSpot

jaotc

Sharedobjectfile(*.so)

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 10

*.java

javac

*.class HotSpot

jaotc

*.so

javac Compile

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

*.so

11

Abletoshare“*.so”fileamongJVMs

HotSpot

HotSpot

HotSpot

HotSpot

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 12

AOTlookslikeCDS/AppCDS…

!

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

CDS/AppCDS (ClassDataSharing)• CDSistheschemeforsharingJavaSEclasslibraryonly.• IncaseofAppCDS,applicationclassesarealsoincluded.

13

ClassDataclasses.jsa

HotSpot

HotSpot

HotSpot

HotSpot

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Worksfor...• Quickerwarmup• Lowertotalmemoryfootprint

Doesnotworkfor...• Nofeaturetopersistorsharemachine(native)code.

14

CDS/AppCDS

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 15

IsAOTanewcompilationmethod?

!

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 16

$ gcc -o HelloAoT HelloAoT.c

IncaseofC...

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 17

HowaboutotherJavaimplementations?

!

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

AOTJavaCompilers• IBMJavaSDKforAIX

• IBMJavaSDKforz/OS

• OracleJavaMEEmbeddedClient

•WebSphereRealTime

• GluonVMetc.

18

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 19

DoesAOTsupporttieredcompilation(C1/C2)?

!

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

AOT SupportsTieredCompilation• Non-tieredcompilationmode(default)–SimilartoC1inClientVM–Nocollectingprofilinginformation–NoJITrecompilationifAOTcodeisnotdeoptimized.

• Tiedcompilationmode(--compile-for-tiered)–ProfilinglevelisassameasC1Level2.– IfhittingAOTinvocationthresholds,methodsarerecompiledbyC1atLevel3firstforgatheringfullprofilinginformation.

20

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 21

WhatdoesAOTworkfor?

!

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Benefitsmight begainedfromAOT...• Nocompilationoverheadatruntime.• Improvestartuptimeandabletoachievepeakperformancefaster.• Abletorunontheplatformwherenativecodecannotbenotgeneratedatruntime(e.g.iOS,embedded).• Densityimprovement- Abletosharenativecode.

22

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 23

$ jaotc --output libHelloAOT.so HelloAOT.class

$ jaotc --output libjava.base.so --module java.base

$ jaotc --output libmyapp.so --jar myapp.jar

$ jaotc -J-XX:+UseCompressedOops --output libHelloAOT.so HelloAOT.class

Howtousejaotc

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

jaotc doesnotresolveallreferencedclasses• jaotc doesnotresolvereferencedclasseswhicharenotsystemclassesorpartofcompiledclasses.1. Havetoaddreferencedclassestoclasspath.

2. Specifyadditionaljavamodules

24

jaotc --output=libfoo.so --jar foo.jar ¥-J-cp -J./

jaotc --output=libactivation.so --module ¥java.activation -J--add-module=java.se.ee

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 25

$ java -XX:AOTLibrary=./libHelloAOT.so HelloAOTHello AOT!

$ java -XX:+PrintAOT ¥-XX:AOTLibrary=./libHelloAoT.so HelloAoT13 1 loaded ./libHelloAoT.so aot library76 1 aot[ 1] HelloAoT.<init>()V76 2 aot[ 1] HelloAoT.main([Ljava/lang/String;)V

Hello AOT!

RunAOTcompiledcode

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

OnJVMstartup...• AOTinitializationcodelooksforwell-knownAOTlibrariesinwell-knownlocation($JAVA_HOME/lib)orlibrariesspecifiedusing-XX:AOTLibrary.• JVMknowsAOTlibrarynameforthefollowingJavamodules.–java.base–jdk.compiler (javac)–jdk.scripting.nashorn (Nashorn)–jdk.internal.vm.ci (JVMCI)–jdk.internal.vm.compiler (Graal)

26

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

VMOptionsshouldbesynchronized.• libjava.base.so-XX:-UseCompressedOops -XX:+UseG1GC• libjava.base-coop.so-XX:+UseCompressedOops -XX:+UseG1GC• libjava.base-nong1.so-XX:-UseCompressedOops -XX:+UseParallelGC• libjava.base-coop-nong1.so-XX:+UseCompressedOops -XX:+UseParallelGC

27

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved. 28

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Limitations

• Experimentalrelease• Nosupport• Noofficialdocument(exceptforJEP)

29

Firstofall...

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Limitations

• AvailableonlywhenusingeitherParallelor G1GConLinuxx64withlibelf.so.• AOTcompilationmustbeexecutedonthesamesystem orasystemwiththesameconfiguration onwhichAOTcodewillbeusedbyJavaapplication.• Unabletocompilejavacodeusingdynamicallygeneratedclassesandbytecode (lambdaexpressions,InvokeDynamic)

30

TheselimitationsareinJava9,andmaybeaddressedinfuturereleases.

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

WhenandwheretouseAOT?

• Event-drivenservicessuchasFunctions• Embedded,IoT,mobile• Notofteninvokedclasses...(nothotcode)• Applicationcodewhichshouldbeprotectedfromdecompilers

...etc.

31

IfAOTisofficiallysupportedandisavailableonseveralplatforms...

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

Summary• SinceJava9(HotSpot),AOTcompilationisavailable,butpositionedasexperimentalreleaseandnoofficialsupport.

• AOThaveseveralcharacteristicsandisexpectedtoimproveperformanceofapplications,especiallysuchshort-livedobjectsasfunctions

•WorkingtoremovecurrentlimitationandimproveAOT.

32

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.

SafeHarborStatementTheprecedingisintendedtooutlineourgeneralproductdirection.Itisintendedforinformationpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfunctionality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andtimingofanyfeaturesorfunctionalitydescribedforOracle’sproductsremainsatthesolediscretionofOracle.

33