Another compilation method in java - AOT (Ahead of Time) compilation
-
Upload
akihiro-nishikawa -
Category
Software
-
view
1.577 -
download
0
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