20幎ã®éãJavaã¢ããªã±ãŒã·ã§ã³ã«ã¯ããã©ãŒãã³ã¹ã®åé¡ããããšããç¥è©±ãç©æ¥µçã«çã¿åºãããŠããŸããã åæã«ãçã«é«è² è·ã®ã·ã¹ãã ãJavaã§äœæãããŠããŸãã æçµçã«èª°ãæ£ããã®ã§ããïŒ Javaã®ããã©ãŒãã³ã¹ãã©ã®ããã«å€åããããç¥ãããã«ã2ã€ã®å©å®³é¢ä¿è ã«æ³šç®ããŸãããJavaèªäœã®äœæè ãšãã·ã¹ãã ã§Javaã䜿çšããã¯ã©ã€ã¢ã³ãã§ãã Alexei ShipilevïŒOracleïŒãšOleg AnastasievïŒOdnoklassnikiïŒã¯ãç§ãã¡ã®è³ªåã«çããããšã«èŠªåã«åæããŸããã
JDKã¯ãªãšãŒã¿ãŒã®ç®ãéããŠèŠãJavaããã©ãŒãã³ã¹
JUG.RUïŒããªãèªèº«ãšããªãã®ä»äºã«ã€ããŠæããŠãã ããïŒ
Alexey ShipilevïŒç§ã®ååã¯Alexey Shipilevã§ãã ç§ã¯10幎以äžã«ããã£ãŠJavaã®ããã©ãŒãã³ã¹ã«åãçµãã§ããŸããã ãã®éãããŸããŸãªJVMã§äœæ¥ããããšãã§ããŸãããæåã¯Intelã®Apache Harmonyã§äœæ¥ãã次ã«Sun Microsystemsã«ç§»ããããã§OpenJDKã§äœæ¥ããŸããã çŸæç¹ã§ãç§ã®å€§éšåã®ä»äºã¯ã補åã®ããã©ãŒãã³ã¹ã®åé¡ãèŠã€ããŠè§£æ±ºããæ¹æ³ãç¹å®ããããåé¡ãåçŽãªå Žåã¯èªåã®æã§ä¿®æ£ããããšã§ãã ããã«ã¯ãä»®æ³ãã·ã³ã®ããã©ãŒãã³ã¹ããã¹ãããæšæºãã³ãããŒã¯ã®æé©åãã¯ã©ã€ã¢ã³ãã®åé¡ã®è§£æ±ºïŒã¢ããªã±ãŒã·ã§ã³ã®æé©åïŒãæ°çŸäžãã«ã®Javaãšã³ã·ã¹ãã ã«å¿ èŠãªã°ããŒãã«ãªæ¹åãå«ãŸããŸãã
JUG.RUïŒä»æ¥ãããã©ãŒãã³ã¹ã¯Javaå šäœã®åé¡ã§ãããåã ã®ã¢ããªã±ãŒã·ã§ã³ãšããŠã§ã¯ãªããæè¡ãšããŠã®åé¡ã§ãããšèšãã®ã¯æ£ãããšæããŸããïŒ
Alexei ShipilevïŒããã«ã€ããŠè©±ãã®ã¯å°é£ã§ããããã©ãŒãã³ã¹ã¯ãå€ãã®å Žåãäœæã«äœ¿çšããèšèªã§ã¯ãªããæçµã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã«ãã£ãŠæ±ºå®ãããããã§ãã éåžžãããã°ã©ãã³ã°èšèªã«ã¯ããã©ãŒãã³ã¹ããªãããã®èšèªã®å®è£
ã«ãããªããŸããã ããã«ãå€ãã®ç°ãªãå®è£
ãå¯èœã§ãã ãã ããJavaã®äžçã§ã¯ãã»ãšãã©ã®å Žåãåžå Žã®95ïŒ
以äžãå ããSun / Oracleããã®JDKã®å®è£
ã«ã€ããŠè©±ããŠããŸãã å¿ã«çããŠãããŸãã
æåã®1995幎ãã2000幎ã«ãããŠãJavaã¯ä»ã®è¥ã補åãšåæ§ãå®éã«ã¯ããŸãå¹ççã«å®è£
ãããŠããŸããã§ããã ããããéå»10幎éã§ãJavaå®è£
ã§å€ãã®ããšãè¡ãããŠããããã以åã¯å
žåçã§ãã£ããšèããããŠããåé¡ããéçºè
ãããã»ã©æ¿ããèŠçã«ãããããšããããŸããã
ãã¡ãããé«æ§èœã¢ããªã±ãŒã·ã§ã³ã®éçºã«äŒŽãå€ãã®å°é£ã¯çãæ®ã£ãŠããŸãããã®ãããç§ã®æèŠã§ã¯ããã®åé¡ãæçµçã«è§£æ±ºããããšã¯èšããŸããã ãã€ã¹ãããå¿ èŠããããã®ã¯ä»ã«ããããããããŸãã
ãããããã¹ãŠã®äººãé«æ§èœãœãªã¥ãŒã·ã§ã³ãå¿ èŠãšããããã§ã¯ãªãããšãèŠããŠããããšãéèŠã§ããå€ãã®éçºè ã«ãšã£ãŠãããã©ãŒãã³ã¹ã¯æååºæºã®ãªã¹ãã«å«ãŸãããã劥åœãªæéã§åäœããŸããã éçºè ãçç£æ§ã®æåŸã®äžæ»Žãæ¬åœã«å¿ èŠãšããå Žåãããªãè€éãªè£œåã«ååšããèœãšãç©Žãåé¿ããå¿ èŠããããŸãïŒãããŠHotSpotä»®æ³ãã·ã³-ããã³äžè¬çã«OpenJDKã¯éåžžã«è€éãªè£œåã§ãïŒã
JUG.RUïŒèšãæããã°ãããã©ãŒãã³ã¹ã¯ãã¯ãã°ããŒãã«ãªJavaã®åé¡ã§ã¯ãããŸãããïŒ
ã¢ã¬ã¯ã»ã€ã»ã·ãã¬ãïŒããæããŸãã
æ£çŽãªãšãããã©ã®ãã©ãããã©ãŒã ã§ãããã©ãŒãã³ã¹ã®åé¡ã¯èªåŒµãããŠããããã«æããŸãã å
ã»ã©èšã£ãããã«ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã»ã©ããã©ãŒãã³ã¹ãå¿
èŠãšããŸããã ããããããã°ã©ãã³ã°ã³ãã¥ããã£ã«ã¯ãç¹°ãè¿ãã®ã«éåžžã«äŸ¿å©ãªæ°žç¶çãªå¡äŸãšã·ã³ãã«ãªã¬ã·ãããããŸãïŒããããç¹°ãè¿ããšãã€ãã·ãšãŒã¿ãŒã®ã°ã«ãŒãã«åå ããŠããããã§ãïŒïŒã ãããŠããããã®äŒèª¬ã®1ã€ã¯ããJavaã®é床ãäœäžãããããšã§ãã å人çã«ãç§ã¯ãããé·ãéé¢é£ããŠããªããšç¢ºä¿¡ããŠããŸãã 圌女ã«ãšã£ãŠã¯ã10ã15幎åã«å®¢èŠ³çãªç¢ºèªããããŸããããç¶æ³ã¯å€ãããŸããã ãã¡ãããå®è¡æã«ããã©ãŒãã³ã¹ã®åé¡ãçºçããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ãªããŸããã ãããããããã®åé¡ã¯ã»ãšãã©ç¥ãããŠããããããã®åé¿çãããããã®ãããªæ¹æ³ã«é©ããªã人ã
ã¯ç¬èªã®ãã¯ã©ã³ãããäœæããŸãã
JUG.RUïŒJDKã®éçºã¯ã©ã®ãããç©æ¥µçã«è¡ãããŠããããããã£ãŠãæ¢ç¥ã®ããã©ãŒãã³ã¹ã®åé¡ãæé€ããŠããŸããïŒOracle JDKã«ã€ããŠè©±ãå ŽåïŒïŒ
Alexei ShipilevïŒéåžžã«æŽ»çºã§ãããããã«ã¯çç±ããããŸããJavaãšã³ã·ã¹ãã ã¯ã1ã€ã®äŒç€ŸããèŠãŠãéåžžã«å€§ããã§ãã åãOracleãšã³ã¿ãŒãã©ã€ãºã¹ã¿ãã¯ã¯Javaã§èšè¿°ãããŠããŸãã ãããã£ãŠããã©ãããã©ãŒã ã§è¡ãããæ¹åã¯ã¹ã¿ãã¯å šäœã«åºãããOracleéçºè ã«ãšã£ãŠã楜ã«ãªããŸãã ããããããããªã©ã¯ã«ãOpenJDKãéçºããŠããçç±ã§ãã ãã®è©±ã¯ãä»ã®ãã³ããŒãä»ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ããŸããŸãªå質ã§ç¹°ãè¿ãããŸãã
JUG.RUïŒããã©ãŒãã³ã¹ãæ¹åãããšããç¹ã§ãJavaã®æè¿ã®é©æ°ã¯ã©ã®ãããªç¹ã§æãéèŠã ãšæããŸããïŒ
Alexei ShipilevïŒãŸã第äžã«ãGarbage-FirstïŒG1ïŒã¬ããŒãžã³ã¬ã¯ã¿ãŒã®è©±ããã£ãããšè«ççãªçµããã«è¿ã¥ããŠããããšãæ°ã«å ¥ã£ãŠããŸãã Garbage-Firstã¯ããªãåã«çºè¡šãããŸããããJava 8ãš9ã§ã®ã¿ååã«åäœãããããå·¥æ¥èŠæš¡ã§äœ¿çšã§ããŸã ãJava9ã§ã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸã ã ãã®è€æ°å¹Žã«ããããããžã§ã¯ãã¯ãæåããçæ³ããããã®ãã€ãã«çºå°ããå®è¡ããŠããŸãã
第äºã«ã VarHandlesã®éçºäžã®äžéšã眮ãæããããã«ãUnsafeãå¿ èŠãšããé«æ§èœã¢ããªã±ãŒã·ã§ã³ã®è©±ã«è¿ã¥ããŠããŸãã äœã¬ãã«ã®ãããã³ã°ã®å©ããåããŠãããã©ãŒãã³ã¹ã®æåŸã®äœäžãçµãæ£åœãªã±ãŒã¹ããããŸãã ãããããåãã®ãšãããUnsafeã¯ãã©ã€ããŒãAPIã§ãããå®éã«ã¯æšæºåãããŠããŸããã ãã®äœ¿çšã¯ãçããŠãã建ç©ã®ããã¶ã£ãŠããç³çã®äžã«éãã¯ãã¿ã§èµ°ã£ãŠããŸãã ãŸããVarHandlesã¯ãæ倧ã®ããã©ãŒãã³ã¹ãŸãã¯ä»ã®æ¹æ³ã§ã¯å©çšã§ããªãäœããã®çš®é¡ã®æ©èœãå¿ èŠãªããŸãã§ãããéèŠãªå Žåã«ãããªãã¯APIãæäŸã§ããæ¹æ³ã®1ã€ã§ãã
ãã1ã€ã®èå³æ·±ãé©æ°ã¯ã Compact Stringsã§ãã ç§ã¯å人çã«ãã®ãããžã§ã¯ããšä»ã®ãã¹ããªã³ã°ãæé©åã«åå ããŸããã å ±éã¯ã©ã¹ãå€§å¹ ã«æ¹åãããã®ãããªãã©ãããã©ãŒã ã®å€æŽã«ãããJavaã§èšè¿°ããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããæŸèæã®å¿ èŠæ§ãããã«æžå°ããŸãã
ãã®å Žåãåæã ãã§ãªããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ãéåžžã«è¯ãçµæãåŸãããŸããã 倧èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã§ã®ã¡ã¢ãªãããããªã³ããšããã©ãŒãã³ã¹ã®10ïŒ ã®åäžã¯ãJavaã®ãããªå¥å šãªæ人åããã©ãããã©ãŒã ã«ãšã£ãŠéåžžã«åªããææã§ãã
JUG.RUïŒããã©ãŒãã³ã¹ã«ã€ããŠè©±ããŠããã®ã§ãããã枬å®ããããã®ãæšæºçãªãæ¹æ³ã¯ãããŸããïŒ ãã¹ãŠããéã®ããã«ããžãã¹ã«ãªããŸããïŒ
Alexei ShipilevïŒçç£æ§ã¯å¿ ããããéã«å€æãããããã§ã¯ãããŸããã å®éã«ã¯ãçç£æ§ã®åäžãåé¡ã®çµæžçåŽé¢ã«ã©ã®ããã«åœ±é¿ããããè©äŸ¡ããããšã¯éåžžã«å°é£ã§ãã å€ãã®å Žåããããã¯éæ¥çãªå¹æã§ããããã°ã©ããããã©ãŒãã³ã¹ã®ç®æšã«é©åããã³ãŒãã®äœæã«è²»ããæéã§ãã ãŠãŒã¶ãŒãçµæãåŸ ã€ããã«è²»ããæéãªã© ãããããµãŒããŒãã¯ã©ãŠããšé«å¯åºŠã®ããŒã¿ã»ã³ã¿ãŒã«é 眮ããããšã§ãããã©ãŒãã³ã¹ãåé¡ã®è²¡åé¢ã«è¿ã¥ããŸãããã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãé«éã«ãªãã»ã©ããªãœãŒã¹ã®æ¶è²»éãå°ãªããªãããµãŒããŒã®ã¬ã³ã¿ã«ãšã¡ã³ããã³ã¹ã®è²»çšãåæžãããŸãã ããã«ãæ¡åŒµæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã«ããããã®äŸåæ§ã¯ãåçŽã«ç·åœ¢ã§ããå¯èœæ§ããããŸãã ç§ã¯ã¢ããªã±ãŒã·ã§ã³ã50ïŒ ãªãŒããŒã¯ããã¯ããŸãããå¿ èŠãªéã®éã¯2åãã€ã³ãã©ã¹ãã©ã¯ãã£ã®è²»çšã¯2åå°ãªããªããŸãã
ããã«ãæé©åã®æéã³ã¹ããæ£åœåããå¿ èŠãããå Žåããéã®åé¡ãçºçããŸãã åæ¥éçºã«é¢äžããçµç¹ã¯æœãå±ã§ã¯ãããŸããã 圌ãã¯ãšã³ãžãã¢ã«åœŒãã®ããžãã¹äžã®åé¡ã解決ããã®ãå©ããããã«ãéãæãã®ã§ãçµç¹ã¯éçºã®ç¹å®ã®é åã«è³éãäŸçµŠãã䟡å€ããããã©ãããç解ããããšããŠããŸãã ãããã®çµæãããããããžãã¹äžã®å©çã ãããã£ãŠãæé©åã¯ããã©ã€ããŒã§æãäžããŠããã ãã§ã¯ãããŸãããããã§ã®éžæã«éåžžã«èå³ãããããã§ããã åã ã®éçºè ã¯ããæããããããŸãããããããã®æ¬²æ±ãããžãã¹ç®æšãšããŸãçžé¢ãããããšããããŸãããããžãã¹èªäœã¯æé©åã®ããã«æé©åã«é¢å¿ããããŸããã
JUG.RUïŒããªãã®æèŠã§ã¯ãããã©ãŒãã³ã¹ç®¡çã®èŠ³ç¹ããæãæåŸ ãããJDKã®é©æ°ã¯äœã§ããïŒ
Alexey ShipilevïŒValue Typesã¯éåžžã«æåŸ ãããé©æ°ã§ãããçŸåšJava 10ã®ãªãªãŒã¹ã§å®è£ ãããäºå®ã§ããããã¯ããã©ãããã©ãŒã ã®ä»ã®éšåãšã®é©åæ§ã®è©³çŽ°ãªåæãå¿ èŠãšããéåžžã«è€éãªãããžã§ã¯ãã§ãã Sacred Cow of Javaã¯åŸæ¹äºææ§ããããŸãã ç Žå£ããæ©èœãäœæããããšã¯ã§ããŸããïŒããæ£ç¢ºã«ã¯ãå°ãã®æéã§ç Žå£ããããšã¯ã§ããŸãããç Žå£ããçç±ãšãŠãŒã¶ãŒãåé¿çãæã£ãŠããçç±ã«ã€ããŠã¯éåžžã«æ£åœãªçç±ãå¿ èŠã§ãïŒã
å€åã¯éåžžã«åçŽãªåé¡ã解決ããŸãã ããã°ã©ãã³ã°èšèªãšããŠã®Javaã®æ±ã®1ã€ã¯ãïŒã»ãšãã©ïŒãã¹ãŠããªããžã§ã¯ãã§ãããèšè¿°ãããŠããªãããããã£ã§ãã ããã¯èå³æ·±ãã¬ãŒãã§ããJavaãªããžã§ã¯ãã«ã¯åå¥ã®ããããã£ããããšããäºå®ã«ç±æ¥ããŸãã ããšãã°ãIDïŒäœããã®ãã£ãŒã«ãã«çªå·42ãæžã蟌ãŸãããªããžã§ã¯ããšããåããçªå·42ãå«ã2çªç®ã®ãªããžã§ã¯ããäœæããå Žåãããã2ã€ã®ãªããžã§ã¯ãã¯èšèªã®ç¹ã§ç°ãªããã¢ã€ãã³ãã£ãã£ã«ããç°ãªããŸãã å®è£ ã®èŠ³ç¹ããèŠããšãããã¯ããããã®ã»ãŒåäžã®ãªããžã§ã¯ãã®2ã€ã®å¥ã ã®ã³ããŒãä¿åããå¿ èŠãããããšãæå³ããŸããããšãã°ããªããžã§ã¯ãã«é¢ããã¡ã¿æ å ±ãä¿åããå ŽæããããŸãã ãŸãããªããžã§ã¯ãã®å€§ããªã°ã©ããã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºããããšãåãªããžã§ã¯ãã®ãªãŒããŒãããã«ãããæçšãªã¡ã¢ãªã®ããªãã®éšåãæ¶è²»ãããŸãã ãããåé¿ã§ããèšèªã«ã¢ã€ãã³ãã£ãã£ã®ãªããšã³ãã£ãã£ãããã°ããã§ãããã ãããŠããã®ãããªãšã³ãã£ãã£ããããŸãïŒããªããã£ãïŒ ãããããããã®ãªã¹ãã¯ä¿®æ£ãããŠããŸãã èªç¶ãªæ¡åŒµã¯ãã¯ã©ã¹ãšããŠèšè¿°ãããããªããã£ããšããŠæ©èœãããšã³ãã£ãã£ã®å®£èšãæå¹ã«ããããšã§ã -ããã¯å€åã§ãã
å€åã¯ãéåžžã®åç §åãšã¯å€§ããç°ãªããŸãã ããšãã°ãObjectã¯ãã¹ãŠã®å€åã®ã¹ãŒããŒã¿ã€ãã§ããïŒ è«ççã«ã¯ããžã§ããªãã¯ãã¹ãã·ã£ã©ã€ãŒãŒã·ã§ã³ãªã©ãšã®çžäºäœçšã®ç¬éãçŸããŸãã ãã®çš®ã®ç¹æ®åãæåã§è¡ãã©ã€ãã©ãªïŒåãGNU TroveïŒããããŸããã誰ããèšèªèªäœã«å®è£ ãããããšãæãã§ããŸãã ãããã£ãŠãããã¯éåžžã«æåŸ ãããæ©èœã§ããã©ã®ããŒãã¹ããããããã¯ããã£ãŠããŸãã ããã§ãã©ã®åé¡ãçºçããããããããŸããã ãã ããéçºäžã«ãå®éã®ããŒãã¹ã®æ°ãšåé¡ã®æ°ã確èªããŸãã
JUG.RUïŒããã©ãŒãã³ã¹ã®åé¡ã¯ã°ããŒãã«ããããã©ã€ããŒãã§ããå¯èœæ§ãé«ããšèãããšãã¢ããªã±ãŒã·ã§ã³ãæé©åããããã®äžè¬çãªã¹ããŒã ã«ã€ããŠè©±ãæ¹æ³ã¯ãããŸããïŒ
Alexei ShipilevïŒç¹å®ã®çç¶ã«åºã¥ããŠããŸãæåã«ã©ãã調ã¹ãããèŠå®ããéåžžã«å
·äœçãªæ¹æ³è«ããããŸãã ã»ã«ã²ã€ã»ã¯ã¯ã»ã³ã³ãšç§ãšä»ã®äººã
ã¯ãã®äž»é¡ã«ã€ããŠå ±åããŸããã
ããšãã°ãéåžžã«åªããã¬ããŒãžã³ã¬ã¯ã¿ãŒããããšèšããŸããããææã®ãšããã倧éã®ãŽããæšãŠãããšãããšãæçµçã«ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããªãã®æéãããããŸãã ã©ã®ã©ã³ã¿ã€ã ãèšè¿°ãããããã°ã©ããŒã1ååã®èŠçŽ ã®é
åã§ããã«ãŸãã¯ç·åœ¢æ€çŽ¢ã䜿çšããŠãœãŒããèšè¿°ããå Žåãé«éã§ã¯ãããŸããã ããã«ã¯éæ³ã¯ãããŸãã-æããªè
ã¯ã7人ã®è³¢è
ãçããªããããªããºã«ãäœãããšãã§ããŸãã
ç§ã®çµéšã§ã¯ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã§èª°ãäœæ¥ããããšããªãããŸãã¯ããã©ãŒãã³ã¹ãäžååã ã£ãå Žåãã»ãŒç¢ºå®ã«ïŒ99ïŒ ïŒããªãå€ãã®ã°ããããŸãã¯æãããªéå¹çæ§ãããããããã¯ããã«æ€åºãããããã«ä¿®æ£ãããæã«ã¯çç£æ§ãåäžããŸãã
JUG.RUïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«å ããŠãç°¡åã«æé©åã§ããå žåçãªåé¡ã¯äœã§ããïŒ
Alexei ShipilevïŒç§ã®ãæ°ã«å
¥ãã¯ãã«ãã¹ã¬ããã®åé¡ã§ãã æ£ãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããæãç°¡åãªæ¹æ³ã¯ãåæãsynchronizationãã¿ãªã䜿çšããããšã§ãã ãã®æ¹æ³ãæªè³ªã§ãããšèšã£ãŠããããã§ã¯ãããŸããããããã¯ãç¶ç¶ããŠããããã«ããŒããŠã§ã¢ãªãœãŒã¹ãå®å
šã«äœ¿çšãããŠããªããšããåé¡ããã°ãã°ãããŸãã ããã¯éåžžã«ç°¡åã«èšºæãããå€ãã®å Žåç°¡åã«ä¿®æ£ãããŸãïŒãã ããå€ãã®å Žåãã¢ãŒããã¯ãã£ã®ä¿®æ£ãå¿
èŠã§ãïŒã
ã¢ã«ãŽãªãºã ã®åââé¡ã¯ãååãšããŠæé«ã®ã¢ã«ãŽãªãºã ã®è€éããæã€ããäœããã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³å
ã®ããŒã¿ã«é¢ããç¹å®ã®ç¥èã䜿çšããŠãã³ãŒãã®æªãéšåãè¯ãéšåã«æžãæãããšãã«éåžžã«äžè¬çã§ããæé©åã®æé©åã§ã¯å€¢ã«ãæããªãã£ã巚倧ãªå©çãåŸãããŸãã
JDK / JVMåºæã®åé¡ãçºçããŸããããŸãã§ãã ããã«ã¯ãã¡ã¢ãªå ã®ããŒã¿å¯åºŠã®åé¡ïŒå€åãåã³æ³¢åããå ŽæïŒãé«åºŠãªæé©åã®åé¡ïŒãšã¹ã±ãŒãåæãšèªåãã¯ãã«åãããã«ã¡ã¯ïŒïŒãããã³ã³ãŒãçæã®åé¡ãå«ãŸããŸãã ãããŠãããã§æ»ãããã質å-åé¡ã¯ãã©ã³ã¿ã€ã ãæªãããæ£ãããåäœããªãããšããŸãã¯ãã®å Žåãããã©ãŒãã³ã¹ãåäžãããããã«ãœãªã¥ãŒã·ã§ã³ãäœããã®æ¹æ³ã§å€æŽããããªãããšã§ãïŒããšãã°ãè¿œå ã®ã©ã€ãã©ãªã䜿çšããŸãïŒã 人ãçµç¹ãç°ãªãã°ãèŠæ¹ãç°ãªããŸãã
äžè¬ã«ãç§ã®èŠ³ç¹ããèŠããšãJavaã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®æé©åã¯ãJVMãé¢äžããŠããªããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®æé©åãšæ ¹æ¬çãªéãã¯ãããŸããã ãã¡ãããJVMã¯ãã®éå±€ã®å¥ã®ã¬ãã«ã§ãããããã«ååšããåé¡ã®å€ãã¯éçºå šè¬ã«åºæã®ãã®ã§ãããç¹ã«Javaã§ã®éçºã§ã¯ãããŸããã
JUG.RUïŒç¹å®ã®åé¡ãååšããå Žåãé«æ§èœã¢ããªã±ãŒã·ã§ã³ã«Javaã䜿çšããæå³ããããŸããïŒ
ã¢ã¬ã¯ã»ã€ã»ã·ãã¬ãïŒç§ãåéã®äžäººã®ç®èãªè³ªåã«çããŠãç§ãæåž«ã®äžäººã§ãã£ãç·åçåŸã®ãšãããããªéãCã§æžããŠã¿ãŠã¯ã©ãã§ãã ããšèšããŸããããã¹ã«ã«ïŒåœæ人æ°ïŒã¯ãã©ãã«ã§ãæ£ãããããã©ãã«ããŠããã§ãã¯ããã足ãæãããªãããã§ãããããŠãã¹ããŒããç§ã«ãšã£ãŠéèŠãªå Žæã§ã¯ã圌ã欺ããŠããããéããªãããã«ããŸããã ãããŠããã®è©±ã¯ãããŸããŸãªã¢ã¯ã¿ãŒãšããŸããŸãªèšèªã§ç¹°ãè¿ãããŸããPascalãšCãJavaãšC ++ãCãšã¢ã»ã³ãã©ãªã©ã§ãã å®éãæ£åžžãªæé·ãèŠèŸŒãŸãã倧èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ãéåžžããã®ã¢ããªã±ãŒã·ã§ã³ã®ããªãå°ããªéšåã®ããã©ãŒãã³ã¹ã«ãã£ãŠæ±ºãŸããŸãã ãããã£ãŠãæ°ãæ£ãã®ã§ãamokãå®è¡ãããäœã¬ãã«ã®ã³ãŒããäœæããèšèªã§èšè¿°ããªãæ¹ãç°¡åãããããŸããã é«æ°Žæºèšèªã§æžã䟡å€ããããå¿ èŠã«å¿ããŠããã欺ããŸããã©ã€ãã©ãªãŒãšã©ã³ã¿ã€ã ã®æ²çãç¹°ãè¿ãã€ãã£ãªã ã®å°ãªãã³ãŒãã«è¡ãããéããã®ãã¬ãã«ãäžããããšã«ãããç¹å®ã®å Žæã§é«éåããŸãã Javaã§ã®ç£æ¥éçºã®å®è·µãšãã®ããã©ãŒãã³ã¹ã®æŽå²ã¯ãäž»ã«ãã®ã¢ãããŒããå ·äœåããŠããŸãã
Alexeyã®ä»åŸã®ã¬ããŒãã¯ã Joker 2016ã«ã³ãã¡ã¬ã³ã¹ã§åºèª¿è¬æŒåœ¢åŒã§éå¬ããããã¡ããããã©ãããã©ãŒã ã®ããã©ãŒãã³ã¹ãšã³ãŒãã®ããã©ãŒãã³ã¹ãæ¹åããæ¹æ³ã«å°å¿µããŸãã
éçºè ã®ç®ããèŠãJavaããã©ãŒãã³ã¹
JUG.RUïŒããªãèªèº«ãšããªãã®ä»äºã«ã€ããŠæããŠãã ããã
Oleg AnastasievïŒç§ã¯Odnoklassnikiã®ãã©ãããã©ãŒã ããŒã ã§åããŠããŸãã ãã©ãããã©ãŒã ããŒã ã¯ãOdnoklassnikiãè¿ éã«æ©èœããããã°ã©ã ãéçºããŸãã ããŸããŸãªããŒã¿ãŠã§ã¢ããŠã¹ããµãŒããŒå士ã®éä¿¡ãã¬ãŒã ã¯ãŒã¯ãªã©ãéçºããã³ãµããŒãããŸãã ããã«ãçç£ã®é床ã§äœããçºçããå ŽåããããåŠçããæ¹æ³ã«é¢ãããœãªã¥ãŒã·ã§ã³ãæ¢ããŠããã®ã¯ãã©ãããã©ãŒã ããŒã ã§ãã Odnoklassnikiãé«éã§åäœãããã®ãç§ãã¡ã®è²¬ä»»ã§ããé«éã§åäœããªãå Žåãåäœããªãã ãã§ãè² è·ãããããšããã«åããããã§ãã
JUG.RUïŒè² è·ã®é«ãã¢ããªã±ãŒã·ã§ã³ã«Javaã䜿çšããã®ã¯çã«ããªã£ãŠãããšæããŸããïŒ ãŸãã¯ãåã«ä»£æ¿æ段ã¯ãããŸãããïŒ
Oleg AnastasievïŒ Javaã¯æéã®èšèªã§ã¯ãªããããããŸããããããéãèšèªããããŸãã ãããã倧èŠæš¡ãªããŒãæžã¿ãããžã§ã¯ããéçºããããã®èšèªãšããŠJavaãæ€èšããå ŽåãååãšããŠãããã«ä»£ãããã®ã¯ãŸã ãããŸããã CãŸãã¯C ++ã§ããé«éãªã³ãŒããèšè¿°ã§ããŸãããåæã«ãã®ã³ãŒãã¯ããé«äŸ¡ã«ãªããŸã-æžã蟌ã¿ããããã°ãããã³ãã®åŸã®ãµããŒãã¯ãJavaã®åæ§ã®ã³ãŒããããã¯ããã«ã³ã¹ããããããŸãã ããã«ãã€ã³ã¿ãŒãããäžã§çªåºããŠããCã³ãŒãã«ã¯ãå€ãã®ã»ãã¥ãªãã£åé¡ãçºçããŸãã ãåç¥ã®ããã«ãèšèªCã§ã¯ãããããçš®é¡ã®å®å
šã§ãªãæ§ç¯ãå¯èœã§ããããã«ãããæªæã®ãã人ã
ãããªããã¯ã©ãã¯ããŸãã Javaã®å®å
šã§ãªãæ§é ã¯å°ãªããããã»ãã¥ãªãã£ã®èŠ³ç¹ãããããšãJavaããã°ã©ã ã®åŽåã¯å°ãªããªããŸãã
ãã®çµæãJavaã®äŸ¡æ Œ/æ§èœæ¯ã¯éåžžã«åªããŠããŸãã
Javaã«ã¯å€ãã®åé¡ããããŸããç¹ã«ãã¡ã¢ãªç®¡çãšé«ãã©ãã£ãã¯ã®ãµããŒãã«åå¥ã«åãçµãå¿ èŠããããŸããããå°éã®ã³ãŒãã§è§£æ±ºã§ããŸãããã®ãããåå¥ã®one-nioã©ã€ãã©ãªãäœæããŸããïŒ httpsïŒ// githubãžã®ãªã³ã¯ã com / odnoklassniki / one-nio ïŒã ã³ãŒãã®æ®ãã®éšåã¯ãã¹ãŠãJavaã®åªããæ©èœïŒé«ééçºãã»ãã¥ãªãã£ãJVMã«çµã¿èŸŒãŸããé©åãªåé¡èšºæããŒã«ããšã©ãŒä¿è·ãªã©ïŒãåããŠããŸãã
JUG.RUïŒç¹å®ã®ããã©ãŒãã³ã¹ã®åé¡ã解決ããå¿ èŠããããšè¿°ã¹ãŸããã ãããã«ã€ããŠè©³ããæããŠãã ããã
Oleg AnastasievïŒç§ãã¡ã«ãšã£ãŠãé床ã¯Javaã§ã®ã³ãŒãå®è¡ã®é床ã ãã§ã¯ãããŸããã ãªãœãŒã¹ã®å¹ççãªäœ¿çšãã€ãŸãåŠçãããããŒã¿ã®éãã¹ã«ãŒããããã¡ã¢ãªæ¶è²»ã®èŠ³ç¹ããèæ ®ããŸãã ãããŠãããJavaã§ã¯ãããªããã£ãã®ã³ã¬ã¯ã·ã§ã³ãæ§é äœããªãããã¯ã®æäœããã€ãã£ãAPIã®ééçãªäœ¿çšãã¢ãã£ããã£ã®ç®¡çããã¡ã€ã«ãã£ãã·ã¥ãªã©ãå€ãã®ããšãæ¬ ããŠãããããããã«ããã¯ãåé¿ã§ãããœãªã¥ãŒã·ã§ã³ãéçºããå¿ èŠããããŸãã
ç§ãã¡ã«ãšã£ãŠããã®è§£éã«ãããJavaã®ããã©ãŒãã³ã¹ã¯ååã§ã¯ãããŸãããããã«ããã®åé¡ã¯Javaã®æ¬¡ã®ãªãªãŒã¹ãŸã§æ°å¹ŽåŸ ã€ããšãã§ããŸãããåé¡ãä»ãã解決ããå¿ èŠããããŸãã ããã«ã€ããŠè©³ããèŠãŠãããŸãããã
ããšãã°ãJavaã®åé¡ç¹ã®1ã€ã¯ãããããã³ã°ãšãã³ããããã³ã°ïŒç¹ã«ãããã¯ãŒã¯ïŒã®äž¡æ¹ã®I / Oããã©ãŒãã³ã¹ã§ãã
ããã¯ããããªé
ä¿¡ã®äŸã§æããã«èŠãããŸãã çºä¿¡ãããªãã©ãã£ãã¯ã®åèšã¯500ã®ã¬ãããã«éããŸããã ãã®ãããªã¹ããªãŒã ãé
ä¿¡ããã«ã¯ãã§ããã ãå€ãã®ãã©ãã£ãã¯ã1ã€ã®ãµãŒããŒã«å±ãããã«ããããªãã§ããã ãæ©ãé
ä¿¡ããå¿
èŠããããŸãã ããŒããŠã§ã¢ã¯ãã·ã³ãã40 GbpsãæäŸã§ããŸãããæšæºãœãªã¥ãŒã·ã§ã³ã䜿çšããJavaã§ã®æžã蟌ã¿ã¯ã40 Gbpsããã¹ãŠäœ¿çšãããµãŒããŒã§ã¯æ©èœããŸãããJavaèªäœã®å
éšã§ããã©ãŒãã³ã¹ã倧å¹
ã«äœäžããŸãã ããã¯ããªãŒãã³ãœãŒã¹ã©ã€ãã©ãªã®äžéšãšããŠè§£æ±ºããåé¡ã®1ã€ã§ãã
40 Gbã®ãã©ãã£ãã¯ã®äŸã¯ã極端ãªãã®ã§ãã è² è·ã®å°ãªããµãŒããŒããããŸãããç¬èªã®åé¡ããããŸãã ããšãã°ãå¥ã®Javaã®åé¡ç¹ã¯ãå€æ°ã®ãªããžã§ã¯ããã¡ã¢ãªã«ä¿åããããšã§ãã Javaã«ã¯ã¬ããŒãžã³ã¬ã¯ã¿ããããŸãã äžæ¹ã§ãããã¯ããªããèªåçã«ãŽããåé€ããããšãã§ããã®ã§ãããã¯è¯ãã§ãã ãããäžæ¹ã§ãå€ãã®æ å ±ãã¡ã¢ãªã«ãã£ãã·ã¥ããå¿ èŠãããå Žåã¯ãå©ãããããå¹²æžããå¯èœæ§ãé«ããªããŸãã ããã«ã100ã®ã¬ãã€ããããã®ããŒã¿ã®é åãã¡ã¢ãªã«ä¿åãããŠããå Žåãããã°ã©ã ãåèµ·åãããšãã«å€±ãããªãããã«ããã-ããŒãã«ããªãã®æéãããããŸãã ãã®ãããªé åãå ±æã¡ã¢ãªã«ä¿åãããã®ã§ãããããã«ãJavaã«ã¯çµã¿èŸŒã¿ã®æ段ã¯ãããŸããã ãã®ãããªå Žæã§ã¯ãæåã®ã¡ã¢ãªç®¡çãå¿ èŠã§ãã Javaã«Unsafeãããããããä»ããŠç¬èªã®æ±ºå®ãäžããããšã¯è¯ãããšã§ãã
JUG.RUïŒJDKã¯ããªãã®åé¡ã«ç¹æã®åé¡ã解決ããæ¹åã«çºå±ããŠããŸããïŒ äœ¿çšã§ããæ°ãããªãã·ã§ã³ã¯ãããŸããïŒ
Oleg AnastasievïŒäžçã§ãªãªãŒã¹ãããJavaã®ææ°ããŒãžã§ã³ã¯8ã§ããèšåãããåé¡ã«å¯Ÿãã解決çã¯ãããŸããã Java 9ã§ãããã®åé¡ã®äžéšã解決ããããšã®ã¿ãæå³ãããŠãããäžéšã®åé¡ã¯10以éã§è§£æ±ºãããŸãã ãã ããæåãŸãã¯å€±æããŸãã ããšãã°ãJava 9ã¯ãŸã ãªãªãŒã¹ãããŠããªããããææ¡ããããœãªã¥ãŒã·ã§ã³ãçŸåšãããã©ãã ãåªããŠããããè¿°ã¹ãã®ã¯ææå°æ©ã§ãã ãã¡ãããããŒã¿çã¯æ¢ã«äœ¿çšã§ããŸããããªãªãŒã¹ã«å°éãããŸã§äœãå€ãããã¯äžæã§ãã ãããã£ãŠãJavaãç»å ŽããŸããèŠãŠã¿ãŸãããã
JUG.RUïŒåœ¹ç«ã€ãšæãããæè¡é©æ°ã¯ãããŸããïŒ ããšãã°ãVarHandlesïŒ
Oleg AnastasievïŒ VarHandlesãç§ãã¡ãå©ãããã©ããã¯ãæçµããŒãžã§ã³ã§ã©ã®ããã«å®è£
ããããããããŠã©ã®ãããæ©ãåäœãããã«ãã£ãŠæ±ºãŸããŸãã
VarHandlesã¯ãAPIã®èŠ³ç¹ããèŠãŠããUnsafeãéããŠç°¡åãã€æ確ã«ã§ããããšãè¡ãããã®ãããªãè€éãªæ¹æ³ã§ãã ããã¯ãããã¿ã€ãã®ã¡ã¢ãªã§é
åã宣èšããå¥ã®ã¿ã€ãã®ã¡ã¢ãªã®é
åãšããŠèªã¿åãæ©äŒã§ãã ã¢ã»ã³ããªãŸãã¯Cã®åçã«ç²ŸéããŠãã人ã«ãšã£ãŠã¯ãç¶æ³ã«å¿ããŠãã¡ã¢ãªã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããLongãByteãªã©ã®ã¡ã¢ãªäœçœ®ãèªã¿åãããã«èŠããŸãã 倧ãŸãã«èšããšãVarHandlesã䜿çšãããšåãããšãã§ããŸãããããå°é£ã«ãªããŸãïŒããã¯æè¡çã«ã¯JDKã¬ãã«ã§ããè€éãªãœãªã¥ãŒã·ã§ã³ã§ãïŒããå®æçã«ãèãæã€ãããã°ã©ããŒããã®ä¿è·ã匷åãããŸãã
ããã«ãVarHandlesã¯å®å
šã§ãªããŠãŒã¹ã±ãŒã¹ã®1ã€ã®ã¿ã解決ããŸãã ãã ããå®å
šã«ç°ãªãã·ããªãªïŒããšãã°ãã«ã¹ã¿ã ã·ãªã¢ã«åãå
±æã¡ã¢ãªã®æäœãªã©ïŒã§ãUnsafeã䜿çšããŸãããJava 10ããåã§ã¯ããã«ä»£ãããã®ã¯æåŸ
ãããŠããŸããã§ããã
JUG.RUïŒããªãã®äŒç€Ÿã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«åãçµãå¿ èŠæ§ã«ã€ããŠäœã決å®ããŸããïŒ
ãªã¬ã°ã»ã¢ãã¹ã¿ã·ãšãïŒã¹ããŒãã®ããã«ã¹ããŒããåºãããšã¯ãããŸããã æé©åã®çµæžå¹æãåžžã«è©äŸ¡ããŸãã
ç§ãã¡ã«ãšã£ãŠãããã©ãŒãã³ã¹ã¯ããŒããŠã§ã¢ã«è²»ããå¿
èŠãããéé¡ã§æž¬å®ãããŸããæåã«ãµãŒããŒã賌å
¥ãã次ã«æ¯å¹ŽããŒã¿ã»ã³ã¿ãŒã§ãããããµããŒãããããã«ã ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãé«ãã»ã©ãåãã¿ã¹ã¯ã«å¿
èŠãªããŒããŠã§ã¢ãå°ãªããªããŸãã ããå°ãªããéã圌ããµããŒãããŸãã
ããã©ãŒãã³ã¹ã®æé©åã¯ã¿ã¹ã¯ã«åºã¥ããŠããŸãã ãã®ç¹å®ã®ã¿ã¹ã¯ã®ããã«ãã®éã®æ©åšã賌å
¥ããäœè£ã¯ãããŸããïŒ
ããšãã°ãããã©ãŒãã³ã¹ã0.5ïŒ
åäžãããããã«ãæ¯èŒçæèœãªããã°ã©ããŒã®1幎éã®ä»äºãè²»ããããšã¯ãããŒã¿ã»ã³ã¿ãŒå
ã®ãã¹ãŠã®ãµãŒããŒãªã©ãç¹å®ã®åé¡ã®åœ±é¿ãåãããŸã§çµæžçã«å¹æçã§ã¯ãããŸããã ãã®åŸãè²»çšå¯Ÿå¹æãé«ããªããŸãã ããã§ãªãå Žåãæ°ãããµãŒããŒã賌å
¥ããæ¹ãç°¡åã§ãã éã§åé¡ã解決ããŸãã
ç§ãã¡ã«ãšã£ãŠãããã©ãŒãã³ã¹ã¯ããžãã¹ææšã§ãã 圌女ã«ã¯æ確ãªããžãã¹ã±ãŒã¹ããããŸãã ããã©ãŒãã³ã¹ã¯ãè²»çšå¯Ÿå¹æãé«ãéãèŠãããŸãã
Javaãœãªã¥ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«é¢ãããã¹ãŠã®çåã«ããããããããããã®åé¡ã«å¯Ÿããç¶ç¶çãªäœæ¥ãé²è¡äžã§ããããšãåã°ããæããŸããJavaèªäœã¯ããã¹ãŠã®æ»æã«ããããããã倧èŠæš¡ã§è² è·ã®é«ãäŒæ¥ãããžã§ã¯ãã®æ¥çæšæºã«ãªããŸããã
Joker 2016ããã°ã©ã ã«ã¯ ãæè¡çã§çéå ¥ãã®ããèå³æ·±ãã¬ããŒãããããŸãã ããã€ãã®äŸãã玹ä»ããŸãã
- Volker Simonis ãSAPïŒ HotSpot InternalsïŒSafepointsãNullPointersãããã³StackOverflows ã
- ISI SB RASã®Tagir ValeevïŒ Stream APIïŒæé«ã®ç¬ã®ããªãŒããŒã®æšå¥šäºé ã
- Jean-Philippe BEMPELãUllinkïŒ Low LatencyïŒMechanical SympathyïŒissues and solutions ã
- ãŠã©ãžããŒã«ã»ã€ã¯ãããOracleïŒ ãã€ãã£ãã³ãŒãããªãããŒãããŒã¿ãJava ã