ããã·ãã«ã¹ã¯ã§éå¬ãããã¡ã€ã³ã®ã·ããªã¢JavaäŒè°
JBreak-2018㧠ã
Twitterã®ã¯ãªã¹ãã£ã³ã»ã¿ãªã³ãžã£ãŒãGraalã®äœ¿çšã«é¢ããå®éã®çµéšãå
±æããŸããã äŒç€ŸïŒPeter-ServiceïŒã¯ã¯ãŒãã³ã°ã°ã«ãŒãå
šäœãäŒè°ã«éããå
šäœãšããŠãã®ã¬ããŒããèãããã«ãªããŸããã åœç¶ã®ããšãªãããGraalã¯ãŸã 倧èã§æœåšçã«å±éºãªå®éšã§ãããšèããããŠããŸãïŒãã ããJDK 10ã«å
¥ãå¯èœæ§ã¯éåžžã«é«ãã§ãïŒã ãã®æ¬æ°ããæŠéã§çŸããããšãç¥ãããšã¯éåžžã«èå³æ·±ãããšã§ãã-ãããŠã©ãã§ãã§ã¯ãªãããã®ãããªã¬ãã«ã®çºå±ã«ãããŠã

Christian Talingerã¯ã10幎以äžã«ããã£ãŠJavaä»®æ³ãã·ã³ãæ±ã£ãŠããŸããã圌ã®å°éç¥èã®éèŠãªã¹ãã«ã¯ãJITã³ã³ãã€ã©ãŒã ãã§ãã Graalã玹ä»ããTwitterã®ãããã¯ã·ã§ã³ç°å¢ã§çŸåšã®ïŒããªã掻çºãªChrisã«ããïŒäœ¿çšãéå§ããã®ã¯ã¯ãªã¹ãã£ã³ã§ããã ãããŠãã¿ãªã³ãžã£ãŒã«ãããšããã®é©æ°ã¯éè³æºãç¯çŽããããšã§äŒç€Ÿã«ããªãã®éé¡ãç¯çŽããŸãã
JBreakäž»å¬è
ãšã®
ãã®ã€ã³ã¿ãã¥ãŒã§ã¯ãChristianãåºæ¬ãæå¿«ã«èª¬æããŠããŸããGraalãšã¯äœããããã管çããæ¹æ³ã§ãã ããããããã·ãã«ã¹ã¯ã®ã¬ããŒãã¯ããå®è·µå¿åã§ããããã®äž»ãªã¿ã¹ã¯ã¯ã芳客ã«Graalãšã®äœæ¥ãç°¡åãã€ç¡çã«éå§ããæ¹æ³ãšãããããã䟡å€ãããçç±ã瀺ãããšã§ããã
ãããã-çµå±ã®ãšãããããã€ãã®çè«çãªçŽ¹ä»ã ããã§ã¯ãJITãžã£ã¹ãã€ã³ã¿ã€ã ã³ã³ãã€ã©ãšã¯äœã§ããïŒ Javaããã°ã©ã ãå®è¡ããã«ã¯ãããã€ãã®æé ãå®è¡ããå¿
èŠããããŸãããŸããJVMã®åœä»€ã§ãœãŒã¹ã³ãŒã-ãã€ãã³ãŒããã³ã³ãã€ã«ãã次ã«ãã®ãã€ãã³ãŒããJVMã§å®è¡ããŸãã ããã§ãJVMã¯ã€ã³ã¿ãŒããªã¿ãŒãšããŠæ©èœããŸãã JITã³ã³ãã€ã©ã¯ãJavaã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ãé«éåããããã«äœæãããŸãããããã°ã©ã å®è¡ã®ããã»ã¹ã§ãã€ãã³ãŒããäœã¬ãã«ã®ãã·ã³åœä»€ã«å€æããããšã«ãããèµ·åãããã€ãã³ãŒãã®æé©åã«åãçµãã§ããŸãã
HotSpot / OpenJDKã¯ãC ++ã§å®è£
ããã2ã¬ãã«ã®JITã³ã³ãã€ã«ã䜿çšããŸãã ãããã¯C1ããã³C2ïŒã¯ã©ã€ã¢ã³ãããã³ãµãŒããŒãšãåŒã°ããŸãïŒã§ãã ããã©ã«ãã§ã¯ããããã¯é£æºããŠåäœããŸããæåã«ãC1ã䜿çšããŠè¡šé¢çã§è¿
éãªæé©åãå®è¡ããã次ã«C2ã䜿çšããŠæãããããªã¡ãœãããããã«æé©åãããŸãã
Java 9ã§ã¯ã
JEP-243ã¯Javaã³ã³ãã€ã©ãJVMã«åã蟌ãããã®ã¡ã«ããºã ãå®è£
ããŸããã ãããŠãããã¯åçã³ã³ãã€ã©ãŒ-JVMCIïŒJava Virtual Machine Compiler InterfaceïŒã§ãã å®éããã®ã¡ã«ããºã ã¯GraalããµããŒãããŠããŸãã Java 9 Graalã¯ã
JEP-295 -JVMã§ã®AOTã³ã³ãã€ã«ïŒAhead-of-timeïŒã®äžéšãšããŠãã§ã«å©çšå¯èœã§ãã£ãããšãèšããªããã°ãªããŸããã 確ãã«ãAOTã³ã³ãã€ã«ã¡ã«ããºã ã¯Graalãã³ã³ãã€ã©ãšããŠäœ¿çšããŸããããã®JEPã§ã¯ãJDKãžã®Graalã³ãŒãã®æåã®çµ±åã¯Linux / x64ãã©ãããã©ãŒã å
ã§ã®ã¿æ³å®ãããŠãããšè¿°ã¹ãŠããŸãã
ãããã£ãŠãGraalãè©Šãã«ã¯ãADKãšJMVCIã§JDKã䜿çšããå¿
èŠããããŸãã ããã«ãMacOSãŸãã¯Windowsãã©ãããã©ãŒã ã§å®è¡ããå¿
èŠãããå Žåã¯ãJava 10ã®ãªãªãŒã¹ãåŸ
ã€å¿
èŠããããŸãïŒå¯Ÿå¿ãããã±ããã§ã¯
JDK-8172670ä¿®æ£ããŒãžã§ã³ãããã10ã«å
¥ããããŸãïŒã

ããã§ãChristianã¯ãçŸåšã®JDKãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯Graalã®ããŒãžã§ã³ãæ§ããã«èšã£ãŠãæ代é
ãã§ãããšããäºå®ïŒ1幎åãŸãã¯ããããè¥ãïŒã«ãªã¹ããŒã®æ³šæãåããŸããã ãããããã§ã¯ãJava 9ã®ã¢ãžã¥ãŒã«æ§ã圹ç«ã¡ãŸãããããã§ãGraalãœãŒã¹ããææ°ããŒãžã§ã³ãåéããã³ãã³ã--upgrade-module-pathã䜿çšããŠJVMã«åã蟌ãããšãã§ããŸãã Graalã®éçºã¯ã¢ãžã¥ãŒã«ã·ã¹ãã ããããã£ãšåã«éå§ããããããç¹å¥ãªããŒã«ã䜿çšããŠãããæ§ç¯ããŸããmxã¯ãã¢ãžã¥ãŒã«Javaã·ã¹ãã ãããçšåºŠç¹°ãè¿ããŸãã ãã®ããŒã«ã¯Python 2.7ã§å®è¡ããããã¹ãŠã®ãªã³ã¯ã¯
GitHubã®Graalãªããžããªã«ãããŸã ã
ã€ãŸãããŸãmxãããã¬ãŒãããŠã€ã³ã¹ããŒã«ãã次ã«Graalãããã¬ãŒãããmxãä»ããŠã¢ãžã¥ãŒã«ã«ã¢ã»ã³ãã«ããŸããããã«ãããJDKã®å
ã®ã¢ãžã¥ãŒã«ã眮ãæããããŸãã
äžèŠããããã®æäœã¯è€éã§æéããããããã«èŠãããããããŸããããå®éã«ã¯ãã®ç¹æ§ã¯ããã»ã©ã²ã©ããã®ã§ã¯ãããŸããã ãããŠãååãšããŠãJDKãŸãã¯æ°ããJDKã§ãããããªãªãŒã¹ãããã®ãåŸ
ããã«GraalããŒãžã§ã³ã眮ãæããæ©èœã¯ãå人çã«ã¯äŸ¿å©ãªããã§ãã å°ãªããšãã¯ãªã¹ãã£ã³ã¯ã圌èªèº«ãã¯ã©ãŠãã®ãã·ã³ã§ããããã¹ãŠãã©ã€ãã§åéããæ¹æ³ã瀺ããŸããã TrueãTruffleã®ã¢ã»ã³ãã«äžã«ãšã©ãŒãçºçããŸãã-ãã·ã³ã«ããã€ãã®è¿œå ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸããã ããããGraalã¯æ£ããçµã¿ç«ãŠãããŠããã®åœ¢åŒã§äœ¿çšãããŸããïŒãããããTruffleã«ã€ããŠå®å
šã«å¿ããããšãã§ãããšçµè«ä»ããããŸãïŒGraalã¯å®å
šã«ç¬ç«ããŠããŸãïŒã
次ã«ïŒJVMãGraalã®äœ¿çšãéå§ããã«ã¯ãããã«3ã€ã®ãã©ã°ãèšå®ããå¿
èŠããããŸãã
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler -XX:-EnableJVMCI
Graalã¯åºæ¬çã«éåžžã®Javaã¢ããªã±ãŒã·ã§ã³ã§ãããããäœæ¥çšã«ã³ã³ãã€ã«ããŠæºåããå¿
èŠããããŸãïŒããããããŒãã¹ãã©ããïŒã ããªã³ããã³ããã¢ãŒãã§ã¯ãããã¯ã¢ããªã±ãŒã·ã§ã³ã®èµ·åãšäžŠè¡ããŠçºçããŸãããã®å ŽåãGraalã¯C1ã䜿çšããŠã³ãŒããæé©åããŸãã
ã¢ããªã±ãŒã·ã§ã³ãéå§ããåã«æ瀺çã«åæåãéå§ãããªãã·ã§ã³ããããŸãããã®ã·ããªãªã§ã¯ãGraalã«èªèº«ãæé©åããããã«æ瀺ããããšãã§ããŸãã ãã ããããã«ã¯éåžžãã¯ããã«æéããããã倧ããªå©ç¹ã¯ãããŸããã grailã¯C1 / C2ããå°ãé·ãåæåãããããå€ãã®ã¯ã©ã¹ãã³ã³ãã€ã«ããå¿
èŠããããããããç©æ¥µçã«ç©ºãããã»ããµãã¯ãŒã䜿çšããŸãã ãããããããã®éãã¯ããã»ã©å€§ãããªããå®è³ªçã«å¹³æºåãããã¢ããªã±ãŒã·ã§ã³ã®åæåäžã«äžè¬çãªãã€ãºã§å€±ãããŸãã
ããã«ãGraalã¯Javaã§èšè¿°ãããŠãããããããŒãã䜿çšããŠåæåããŸãïŒC1 / C2ã®å Žåãmallocãä»ããŠã®ã¿ã¡ã¢ãªã䜿çšãããŸãïŒã ã¡ã€ã³ã¡ã¢ãªã®æ¶è²»éã¯ãã¢ããªã±ãŒã·ã§ã³ã®éå§æã§ãã GraalãšC1 / C2ã¯äž¡æ¹ãšããã³ã³ãã€ã«æã«ç¡æã®ã«ãŒãã«ã䜿çšããŸãã Grailã®ã¡ã¢ãªæ¶è²»ã¯ãGCãã°ãæå¹ã«ããããšã§ç£èŠã§ããŸãïŒçŸåšãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ãããããGraalãåæåãããããã®åé¢ã¯ãããŸããïŒã
ããŠãç§ãã¡ã¯ããããã¹ãŠèšå®ããæ¹æ³ãåŠã³ãŸãã-ä»ãããã®çç±ãç解ããæã§ãã Graalã䜿çšããå©ç¹ã¯äœã§ããïŒ
ã¯ãªã¹ãã£ã³ã¯å®çšçãªäŸã䜿çšããŠãã®è³ªåã«çããŸããã 圌ã¯Scalaã§æžããã1ã€ã®ãããžã§ã¯ãããããã€ãã®ãã³ãããŒã¯ãéå§ããŸããã1ã€ã¯CPUãç©æ¥µçã«äœ¿çšããŠããããã1ã€ã¯ããç©æ¥µçã«ã¡ã¢ãªãæäœããŠããŸããã CPUã§åäœãããã³ãããŒã¯ã§ã¯ãGraalã䜿çšããŠãããšãéå§æéãé·ããªã£ãããã«å¹³åããŠ1ç§éé¡èãªäœäžãèŠãããŸããïŒãã³ãããŒã¯èªäœãå®äºãããŸã§ã«5ç§ããããŸããïŒã ãããã2çªç®ã®ãã³ãããŒã¯ã§ã¯ãGraalã¯éåžžã«è¯ãçµæã瀺ããŸãã-C1 / C2ã®ã28ã«å¯ŸããŠã20ç§ã ãããŠãããã¯ãChristianãææããããã«ãScala Graalã䜿çšããäŸã¯ïŒScalaã«ãã£ãŠçæããããã€ãã³ãŒãã®åçæ§é ã®ããïŒããŸãæ©èœããŠããŸããã ã€ãŸããçŽç²ãªJavaã¢ããªã±ãŒã·ã§ã³ã®å Žåããã¹ãŠãããã«æ¹åãããããšãæåŸ
ã§ããŸãã
ããã«ãGCãã°ã衚瀺ãããšããGraalã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãçæããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãã¯ããã«å°ãªãïŒçŽ2åïŒããšã¯æããã§ããã ããã¯ãããŒãäžã«äœæããããªããžã§ã¯ãã®æ°ãæé©åã§ãããããå¹ççãªãšã¹ã±ãŒãåæã«ãããã®ã§ãã

ç§ãèããããšã«å¯Ÿããå人çãªå°è±¡ãèŠçŽãããšããã®ã¬ããŒãã¯ç§ã«ãšã£ãŠéåžžã«å
æ¬çãªãã®ã§ããããç·æ¥ã«Graalã«è¡ãããšãã粟ç¥ã§åºåã¡ãã»ãŒãžãäžåäŒããªãã£ããšèšããŸãã éæ³ã®è¬ããªãããã¹ãŠãåžžã«å®éã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠæ±ºå®ãããããšã¯æããã§ããã¯ãªã¹ãã£ã³èªèº«ã¯ãç¹å®ã®å€ã¯ãã¡ããç¹å®ã®ãã³ãããŒã¯ã«äŸåããããšãèªããŠããŸãã ãããã«ãããGrailãè©Šãããšã«ãã人ã¯ãç§åŠçãªçªãæ¹æ³ã䜿çšããå®è¡ããŠïŒããããïŒãã°ãèŠã€ããå¿
èŠããããŸãïŒããã«ç·šéããŠããGraalãªããžããªã®ãã«ãªã¯ãšã¹ãã«èšå
¥ããæ¹ãè¯ãã§ãããïŒã
ããããå
šäœçã«ããã€ã¯ããµãŒãã¹ãšã¹ããŒãã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšã«åããçŸåšã®åŸåããããŠãã®çµæãYoung Genã®ããã¢ã¯ãã£ããªïŒãããŠæ£ããïŒã¢ããªã±ãŒã·ã§ã³ã«åããåŸåã«ãããGraalã¯éåžžã«è¯ãããã§ãã
ãã®ããããããžã§ã¯ããããããªè¡ã§Java 9ã«ç¿»èš³ã§ããïŒãŸãã¯ãŒãããäœæããïŒå Žåã¯ãééããªãGraalãè©ŠããŠã¿ãŸãã ãããŠãäŸãã°ãã¬ããŒãã®éç¹ãç¹ã«JITã³ã³ãã€ã©ãŒãšããŠã®Graalã«éç¹ã眮ããŠããããšããå¬ããã£ãã§ããäžè¬ã«ãæ®éã®Javaéçºè
ã¯ããããã®å質ã§ïŒã€ãŸããTruffelãªã©ãªãã§ïŒå¿
èŠãšããããã§ãGraalVMãOracleãæè¿ãJVMã«åºã¥ããããŸããŸãªèšèªã®éçºããã³ã©ã³ã¿ã€ã çšã®ãã¬ãŒã ã¯ãŒã¯ã«çµ±åããŸããã ã¡ã¢ãªã³ã¹ãããã¹ãããæšæºã®C1 / C2ãšGraalã®éããã©ãã»ã©é¡èãã確èªããã®ã¯èå³æ·±ãã§ãããã äžæ¹ãæè¿ã§ã¯ããªãã®éã®ã¡ã¢ãªãã¢ããªã±ãŒã·ã§ã³ã«å²ãåœãŠãããŠããããã®äž»ãªéã¯èµ·åæã«æ¶è²»ãããŸããïŒä»æ¥ã¯éåžžãã¢ããªã±ãŒã·ã§ã³èªäœãæ¢ã«èµ·åããŠããã®ã¯éåžžã³ã³ããã®åæåãšéå§ã§ãïŒããããã®æ°å€ã¯æããã«ããããã®å Žåã§ãããã»ã©éèŠã§ã¯ãããŸããã
ãããããã¬ããŒããããã¬ãŒã³ããŒã·ã§ã³ãããŠã³ããŒãã§ããŸããå®ã®ãšãããç§ã¯å人çã«éåžžã«èå³ãæã£ãã®ã§ãChristianãè¡ã£ããã¹ãŠã®ã¹ããããç¹°ãè¿ãã€ããã§ãããJavaãã³ãããŒã¯ã¹ã€ãŒããçŽæ¥å®è¡ããããšããŸãïŒããšãã°ãDaCapoãšSPECjvm2008-ç§ã¯Javaãã³ãããŒã¯ãããŸãåŸæã§ã¯ãªãã®ã§ãæè¬ããŸãïŒèª°ããã³ã¡ã³ããŸãã¯éŠ¬åã§ããé©åãªãªãã·ã§ã³ãææ¡ããŸãïŒã ããŠãäœæ¥ã®è©³çŽ°ã«è¿ã-åçŽãªWebã¢ããªã±ãŒã·ã§ã³ïŒããšãã°ãSpringBoot + Jetty + PostgreSQLïŒãã¹ã±ããããè² è·ãããã£ãç¶æ
ã§ãã©ã€ãããŠãæ°å€ãæ¯èŒããŠã¿ãŸãã çµæãã³ãã¥ããã£ãšå
±æããããšãçŽæããŸãã