ç§ãã¡ã¯ããŸãç¥ãããŠããªãJEPã«ç²Ÿéãç¶ããŠããŸãã ä»åºŠã¯ãValhallaããnestmatesãšåŒã°ããå¥ã®ãµããããžã§ã¯ãããããŸãã ãã®æ©èœã«ããããã¹ããããã¯ã©ã¹ã¯çžäºã«ç¡å¶éã«ã¢ã¯ã»ã¹ã§ããŸãã æ£ç¢ºã«-以äžã§èª¬æããŸãã å®éããã®èšäºã¯åå¿è ã«ãšã£ãŠåé¡ã®æ¬è³ªãéåžžã«æ確ã«èª¬æããŠããããã JEP 181ã®æ£åŒãªç¿»èš³ã§ãã
ïŒåå¿è ã®èŠãç®ã§ã¯ãªããããçš®ã®å°é家ã®æèŠãå¿ èŠãªå Žåã¯ããããŒã¿ãªãã¹ããŒãã¿ã®ã«ãã¬ãšãããŠã©ãžããŒã«ã€ã¯ãããªã©ã®å°é家ã«çžè«ããã»ããããã§ãããããšããã§ïŒã
JEPã¯JDK Enchancement Proposalã§ãããæ£åŒãªJSRããªãªãŒã¹ããããŸã§ãã³ããã·ã§ããŒãããéå ¬åŒã«äœæ¥ã§ããããã«ããOpenJDKã®ææ¡ãšæ¹åãåéããããã»ã¹ã§ãã JEPã¯OpenJDKã®æŠç¥èšç»ãšèããããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ããã°ã©ããŒïŒOpenJDKã®ã³ããã¿ãŒã§ã¯ãªãïŒã«ãšã£ãŠããã®ãããªç¥èã¯ã³ãŒããçŽæ¥èšè¿°ããã®ã«åœ¹ç«ã€å¯èœæ§ã¯äœãã§ãã代ããã«ãJavaãã©ãããã©ãŒã ã®äžè¬çãªã¢ãŒããã¯ãã£ã®ç解ãæäŸããæŠç¥çã«èããè¿ãå°æ¥ãäºæž¬ã§ããããã«ããŸãã
æå°å€ã¿ã€ãã«é¢ããæè¿ã®èšäºãèªãã 人ãã¡ãžã®ããã€ãã®èšèã ïŒ MVTã®å®çšçãªåŽé¢ã«é¢ããèšäºã¯çŸåšæžãããŠããŸã ïŒvwithfield vwithfield
ã«ã€ããŠè©±ããŸãããããã«ãããéžæããå€ã®åãååŸãããã®äžã®ãã£ãŒã«ãã眮ãæããããšãã§ããŸãã ãã®ãããªã¡ãœããã¯ãæããã«ãæå³ãã§ã¯ãªãããªããžã§ã¯ãã©ãããŒã«ããã¹ãã§ãã è«ççã«ã¯ãèšèªãªããžã§ã¯ããžã®ãã©ã€ããŒãã¢ã¯ã»ã¹ãæã€ã¯ã©ã¹ã®ã¿ããã®ãã£ãŒã«ããå€æŽã§ããŸãã ãããã£ãŠãåãšå€ã®ã³ã³ããŒãã³ãïŒVCCãšDVTïŒã®éã«ã¯ãç¹å¥ãªä¿¡é Œé¢ä¿ãçããã¯ãã§ãããã®å®è£
ã¯ãJVMã§çŽæ¥å®çŸããããã®ã§ãã
ãããã£ãŠãJVMã®äžéšã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ãVMã¬ãã«ã§æ瀺çãªãã¹ãã¡ã€ããå®è£
ã§ããäºãã®ãã©ã€ããŒããã£ãŒã«ãããã³ã¡ãœããã«ã¢ã¯ã»ã¹ã§ãããšæ³å®ãããŠããŸãã ããã¯ãã©ãããŒãçæããããã®ã³ã³ãã€ã©ããã¯ã§ã¯ãªããå®å
šã«ãã€ãã£ããªæ©èœã§ãã ãããã®ããŒãžã§ã³ã®JVMã§ã¯ã vwithfield
ã¯ãç¹å®ã®åå€ã¿ã€ãã®ãã¹ãŠã®ãã¹ãã¡ã€ããå©çšã§ããŸãã èšãæãããšã vwithfield
ã¯ããã¹ãŠã®ãã©ã€ããŒãã¡ãœãããå©çšå¯èœãªäžçš®ã®ãã«ãã»ã«ãå
ã§å©çšå¯èœã«ãªããŸãã
ããŠããã£ããããããŠãJEPã«é²ã¿ãŸãããïŒ
JEP 181ïŒãã¹ããããã¯ã©ã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡
ç°¡åãªèª¬æ
JVMã®ã¢ã¯ã»ã¹ãã§ãã¯ãããã¹ããããã¯ã©ã¹ã®ã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒãããã³ãã£ãŒã«ãã«å®çŸ©ãããJavaèšèªã«ãŒã«ã«é¢é£ä»ããã¯ã©ã¹ããã¹ãã¯ã©ã¹ã«åå²ããå¿ èŠããããŸããã€ãŸããå ±éã®ã¢ã¯ã»ã¹å¶åŸ¡ã³ã³ããã¹ããå ±æããïŒãããŠéåžžã¯ãœãŒã¹ãå«ã1ã€ã®ãã¡ã€ã«ïŒã ç¹ã«ãã¯ã©ã¹ãã¡ã€ã«ããã¹ãŠåããããã¬ãã«åã®ã³ã³ããã¹ãã§ã³ã³ãã€ã«ãããŠããå Žåãå¥ã®ã¯ã©ã¹ãã¡ã€ã«ã®ãã©ã€ããŒãåã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã ããã¯ãã³ã³ãã€ã©ãã¢ã¯ã»ã¹ã®ã¬ãã«ãäžããã¢ããã¿ãŒã¡ãœãããã»ããã¢ããããå¿ èŠããªãããã«ããããã«å¿ èŠã§ãã
ç®æš
ä»®æ³ãã·ã³ã®æ©èœãæ¡åŒµããŠãã³ã³ãã€ã©ãã¯ã©ã¹ãã°ã«ãŒãåããŠãå ±éã®ã¢ã¯ã»ã¹å¶åŸ¡ã³ã³ããã¹ããå ±æãããœã±ãã ïŒãã¹ãïŒã«ã§ããããã«ããŸãã ããã«ãããã¯ã©ã¹ãåã ã®ã¯ã©ã¹ãã¡ã€ã«ã«ã³ã³ãã€ã«ããè«ççã«1ã€ã®å ±éãšã³ãã£ãã£ïŒJavaã®å éšã¯ã©ã¹ãªã©ïŒã®äžéšãšããŠç¶ç¶ããç¹å¥ãªã¢ããã¿ãŒã¡ãœãããäœæããã«äºãã®ã¡ã³ããŒã«ã¢ã¯ã»ã¹ã§ããŸãã
ã¯ã©ã¹ã®ãã¹ããšã¯ã©ã¹ãã¡ã€ã«å ã®é¢å¿ãæ£ç¢ºã«èšè¿°ããæ©èœãè¿œå ããŸãã
Unsafe.defineAnonymousClass()
ããã³ã·ãŒã«ãã¯ã©ã¹ã®å®å
šã§ååã«ãµããŒããããŠãã代æ¿æ段ãªã©ãé¢é£ããæ©èœã®åºç€ã圢æããä»®æ³ãã·ã³ã§æºåäœæ¥ãUnsafe.defineAnonymousClass()
ãŸãã
å¶éäºé
ãã®JEPã¯ãã¢ãžã¥ãŒã«ãªã©ã®ä»ã®å€§èŠæš¡ãªã¢ã¯ã»ã¹å¶åŸ¡ãããžã§ã¯ãã®æ¹åã«ã¯é¢ä¿ããŠããŸããã
ããæ°
å€ãã®JVMèšèªã§ã¯ã1ã€ã®ãã¡ã€ã«ã§è€æ°ã®ã¯ã©ã¹ã宣èšãããïŒJavaã«ãã¹ããããã¯ã©ã¹ããããªã©ïŒãä»ã®ãœãŒã¹ïŒã¯ã©ã¹ã§ã¯ãªãïŒãã¯ã©ã¹ãã¡ã€ã«ã«å€æãããã§ããŸãã äžæ¹ããŠãŒã¶ãŒã®èŠ³ç¹ããã¯ããããã¯ãã¹ãŠãåãã¯ã©ã¹ãã®äžéšã§ããããã«èŠããããããŠãŒã¶ãŒã¯çŽæçã«åãã»ãã¥ãªãã£ã¢ãŒããé©çšãããŠãããšæ³å®ããŸãã ã³ã³ãã€ã©ã¯ãæåŸ
ã«å¿ããããšããŠãå€ãã®å Žåãã¢ããã¿ã¡ãœããã䜿çšããŠpackage
ããã¯ã©ã¹ã®private
ã¡ã³ããŒããã§ãã¯ããå³å¯ãã軜æžããå¿
èŠããããŸãã æ®å¿µãªããããã®ãããªã¢ããã¿ãŒã¯ãã¹ãŠã®ã«ãã»ã«åãç Žå£ããããŸããŸãªããŒã«ã§ãšã©ãŒãåŒãèµ·ãããããåã«ãŠãŒã¶ãŒã®èª€è§£ãæãå¯èœæ§ããããŸãã é£æ¥ïŒ nestmate ïŒãå
±éã®ã¢ã¯ã»ã¹å¶åŸ¡ã¡ã«ããºã ã«ãã£ãŠçµåãããŠãããã¹ãã圢æããã¯ã©ã¹ãã¡ã€ã«ã®ã°ã«ãŒãã«æ£åŒãªå®çŸ©ãå°å
¥ãããšã誰ã«ãšã£ãŠãåãçµæãããè¿
éãå®å
šãã€ééçã«å®çŸãããŸãã
説æ
Javaèšèªä»æ§ã§ã¯ãã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ãŒã¹ããã¹ãã§ããŸãã JLS 7.6ã§ã¯ããããã¬ãã«ã®å宣èšã®æŠå¿µãå°å ¥ãããŠããŸãã ãã¹ããããåãããã€ã§ããã¹ãã§ããŸãã äžäœã¬ãã«ã®åãšãã®äžã®ãã¹ãŠã®åã«ã€ããŠãã ãã¹ãã圢æãã ããšèšãããšãã§ããŸãã ãã¹ãã®2ã€ã®ã¡ã³ããŒã¯ããã®ãã¹ãã®é£æ¥ãšåŒã°ããŸã ïŒ ãã¹ãã¡ã€ã ïŒã ãã€ããŒã¯ããã©ã€ããŒããã£ãŒã«ããã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒãå«ããçžäºã«ç¡å¶éã«ã¢ã¯ã»ã¹ã§ããŸãïŒ JLS 6.6.1 ïŒã ãã®ãããªã¢ã¯ã»ã¹ã¯ãä»ã®ãã¹ãŠã®åãå«ãæäžäœã®å宣èšå ã®ãã¹ãŠã«å®å šã«æ¡åŒµãããŸãã ïŒãã®æäžäœã¿ã€ãã¯ãããããã±ãŒãžããšèããããšãã§ããŸãããã®äžã«ã¯ããã¹ãŠã®ãŠãŒã¶ãŒãå®éã®Javaããã±ãŒãžã®ã¡ã³ããŒã«æäŸããããã®ãããå¹ åºãã¢ã¯ã»ã¹ãèš±å¯ãããŸãïŒã
Javaã³ã³ãã€ã©ã¯ããã¹ããããã¿ã€ãã®ã°ã«ãŒãã察å¿ããã¯ã©ã¹ãã¡ã€ã«ã°ã«ãŒãã«ã³ã³ãã€ã«ããŸãã ãã®ãã¹ãïŒ JVMS 4.7.6 ã JVMS 4.7.7 ïŒãå
·äœåããããã«ã InnerClasses
EnclosingMethod
ãšEnclosingMethod EnclosingMethod
䜿çšãEnclosingMethod
ã ãããã®å±æ§ã¯ãJVMãè¿åãèå¥ããã®ã«ååã§ãããããåã«ãã¹ããããã¿ã€ãã§ãããšæã£ãå Žåããããããåºãããäžè¬çãªå®çŸ©ãè¿åã«äžããããšãã§ããŸãã å¹çãåäžãããããã«ããã€ããŒãšæäžäœã¯ã©ã¹ïŒ nest topãšåŒã°ããïŒã®äž¡æ¹ã§äœ¿çšãããããã€ãã®æ°ããå±æ§ãè¿œå ããŠãã¯ã©ã¹ãã¡ã€ã«ã®åœ¢åŒãå€æŽããããšãææ¡ããŸãã åãã€ããŒã«ã¯é ç¹ãæãå±æ§ããããåé ç¹ã«ã¯æ¢ç¥ã®ãã€ããŒãæãå±æ§ããããŸãã
JVMã®ã¢ã¯ã»ã¹ã«ãŒã«ãå°ãå€æŽãã JVMS 5.4.4ã«æ¬¡ã®ãããªãã®ãè¿œå ããŸãã
ãã£ãŒã«ããŸãã¯ã¡ãœããR
ã¯ã次ã®æ¡ä»¶ã®ããããã«è©²åœããå Žåã«ã®ã¿ãã¯ã©ã¹ãŸãã¯ã€ã³ã¿ãŒãã§ã€ã¹D
ããã¢ã¯ã»ã¹ã§ããŸãã
- ...
-
R
ã¯ãã©ã€ããŒãã¢ã¯ã»ã¹ããããå¥ã®ã¯ã©ã¹ãŸãã¯ã€ã³ã¿ãŒãã§ã€ã¹C
ã§å®çŸ©ãããŠãããããC
ãšD
ã¯ãã€ããŒã§ã
C
ãšD
ãé£æ¥ããããã«ã¯ãåãé ç¹ãæã£ãŠããå¿
èŠããããŸãã ã¿ã€ãC
ã MemberOfNest
å±æ§ã«D
ãè¿œå ããããšã«ãããèªåèªèº«ãã¹ãããD
ã¡ã³ããŒãšããŠå®£èšããŸãã D
ãNestMembers
å±æ§ãè¿œå ãããšãã«ããã®è¿åããã§ãã¯ãããŸãã ãã®ãã§ãã¯ã¯ããã€ããŒã®ãã©ã€ããŒãã¡ã³ããŒã«ã¢ã¯ã»ã¹ããããšãããšãã«ã®ã¿èµ·åãããŸãã ãã®ãããä»ã®å Žåã«çºçããåã«ãäžéšã®ã¿ã€ããããŒãããå¿
èŠããããŸãã
ãããã®æ°ããã«ãŒã«ã®å°å ¥ãšãã€ãã³ãŒãã®å¯Ÿå¿ããå€æŽã®åŸãjavacã¯ãã®è¿é£ã®ãã©ã€ããŒãã¡ã³ããŒã®çŽæ¥åŒã³åºãåœä»€ãçæã§ãããããjavacã«ã©ãããŒã¯ããå¿ èŠãããŸããã 察å¿ããåŒã³åºããã€ãã³ãŒãïŒ
- ãã©ã€ããŒãã³ã³ã¹ãã©ã¯ã¿ãŒã®
invokespecial
- ãã©ã€ããŒãïŒéã€ã³ã¿ãŒãã§ã€ã¹ïŒã€ã³ã¹ã¿ã³ã¹ã¡ãœããã®
invokevirtual
- ãã©ã€ããŒãã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã®
invokeinterface
- ãã©ã€ããŒãéçã¡ãœããã®
invokestatic
VMã³ãŒãã§ãã€ããŒã®æŠå¿µãšå¯Ÿå¿ããã«ãŒã«ãå®è£ ããåŸãjavacã«ãã®åœ¹å²ãåé€ãããæ¢åã®ã¢ã¯ã»ã¹ãã§ãã¯ãæ¹åããã ãã§ãªããä»ã®ãããžã§ã¯ããæ¯æŽããŸãã
- ãžã§ããªãã¯ã®ç¹æ®åã«ãã ãä»»æã®ç¹æ®ãªã¿ã€ãããžã§ããªãã¯ã®é£æ¥ãšããŠäœæã§ããŸã
-
Unsafe.defineAnonymousClass()
APIã®å®å šã§ååã«ãµããŒãããã代æ¿åã¯ãæ°ããã¯ã©ã¹ãäœæããæ¢åã®ã¯ã©ã¹ã®é£äººã«ããããšãã§ããŸãã - ãã·ãŒã«ã¯ã©ã¹ãã®æŠå¿µã¯ãé£æ¥ãããµãã¯ã©ã¹ã®ã¿ãäœæããæ©èœãšããŠå®è£ ã§ããŸãã
ãããœãããªã¢ã¯ã»ã¹ã«ãŒã«ã¯ã次ã®ç¹ã§ãã§ãã¯ã«åœ±é¿ããŸãã
- ãã£ãŒã«ããšã¡ãœããã®éç€ºïŒ JVMS 5.4.3.2ãªã©ïŒ
- é瀺æ¹æ³ã¯å®æ°ãåŠçããŸãïŒ JVMS 5.4.3.5 ïŒ
- ãµã€ãæå®åã®é 眮ãåŒã³åºãïŒ JVMS 5.4.3.6 ïŒ
-
java.lang.reflect.AccessibleObject
ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠJavaã¬ãã«ã®ã¢ã¯ã»ã¹ããã§ãã¯ãã -
java.lang.invoke.MethodHandles.Lookup
ãªã¯ãšã¹ããè¡ããšãã®ã¢ã¯ã»ã¹å¶åŸ¡
ãã€ãã³ãŒãã®åŒã³åºãã«é©çšãããä»ã®å¶éãšã®çžäºäœçšãæ€èšããå¿ èŠãããå ŽåããããŸããäŸïŒ
- ãã©ã€ããŒãã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã¯ã
invokespecial
ãä»ããŠåŒã³åºãå¿ èŠãããinvokespecial
ïŒ JVMS 6.5 ïŒ
ããã³MethodHandle
åŒã³åºãã®ã»ãã³ãã£ã¯ã¹ïŒãã€ãã³ãŒãã®å¶éãåæ ããŸãïŒã JVMS 3.7ãªã©ãäžè¬çãªèª¬æã§äœããå€æŽããå¿
èŠããããŸãã
ä»®æ³ãã·ã³ã¬ãã«ã§ã®ãã€ããŒãžã®ã¢ã¯ã»ã¹ã®å¶åŸ¡ãéå§ããjavacã«ãã£ãŠçæãããä»ã®ãã¹ãŠã®ã¢ããã¿ãŒã¡ãœããããçŸåšã®ããã«package-privateã§ã¯ãªãprivateã¢ã¯ã»ã¹ã¬ãã«ã«å¶éã§ããŸãã ãããããŸã£ããå¿ èŠãšãããªãå€ãã®å Žæã
å®éã®åé¡ïŒ
- ããã§ã®ææ¡ã¯ãVMã¬ãã«ã§ãã¢ã¯ã»ã¹å¢çãé£äººãŸã§æ¡åŒµããŸãã ãã§ã«ãããè¡ã£ãŠããå Žåã
protected
ããã³private
ãšããŠå®£èšãprotected
ã¯ã©ã¹ãžã®ã¢ã¯ã»ã¹ãå¶éããŠãJavaèšèªã®èŠåãããæ£ç¢ºã«protected
ã¹ãã§ã¯ãªãã§ããããïŒ ããã«ã¯ãJVMãClass.getModifiers
ã®å€ã«åºã¥ããŠè¿œå ã®ãã§ãã¯ãå®è¡ããå¿ èŠããããŸãã ïŒã»ãšãã©ã®å Žåããã©ã€ããŒãã¢ã¯ã»ã¹ãpackage-privateã«æ¡åŒµãããããšãåæãšããåå°ã䜿çšããŠãã®ãããªã³ãŒããå£ãå¯èœæ§ãããããããããã¹ãã§ã¯ãããŸãããããã«ãä¿è·ã¯ã©ã¹ã®æ°ãããã§ãã¯ã¯ããããªãã¯ïŒã - ãè¿é£ãé¢ä¿ã¯åå°ã§èŠãããã¹ãã§ããïŒ ãã¡ããããªãã¬ã¯ã·ã§ã³ã®åºæ¬çãªæ¹æ³ã¯ãé£äººãžã®ã¢ã¯ã»ã¹ã®èŠåãèæ
®ã«å
¥ããããã«èª¿æŽããå¿
èŠããããŸãã ããããè¿æã®ãã§ãã¯ããããªãã¯APIã«æž¡ãããšã¯äŸ¡å€ããããŸã-ããã«å¯ŸåŠããå¿
èŠããããŸãã èããããæãåçŽãªã¯ãšãªã¯æ¬¡ã®ãšããã§ãã
Class#getNestTop
ã¯ãã¯ã©ã¹ããœã±ããã®äžéšã§ãªãå ŽåããŸãã¯ãœã±ããã®äžéšã§ãªãå Žåã«null
ãè¿ããŸãã ïŒã¯ã©ã¹èªäœãæäžäœã®å Žåãã¯ãšãªã¯ããèªäœãè¿ããŸãïŒã
代æ¿æ¡
Javaã³ã³ãã€ã©ã§ã©ãããŒãçæãç¶ããããšãã§ããŸãã äœããäºæž¬ããã®ã¯é£ããã§ãã ããšãã°ãProject Lambdaã§ã¯ãå éšã¯ã©ã¹ããã®æ¡åŒµã«é¢äžããŠããå Žåãã¡ãœããåç §ãå ¬éããããšã¯å°é£ã§ãããããã«ãããæ°ããã¢ããã¿ãŒã¡ãœãããäœæãããŸããã ã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããã©ãããŒã¯æ±ãã«ããäºæž¬äžèœã§ãããããå€ãã®ãã°ããããéã³ã³ãã€ã©ãŒããããã¬ãŒãªã©ã®ããŒã«ã䜿çšããŠåæããããšã¯éåžžã«å°é£ã§ãã
æåã«ãæ¢åã®InnerClasses
ããã³EnclosingMethod
å±æ§ã®ã¿ã䜿çšããŠè¿åã決å®ããããšãææ¡ããŸããã ããããç¹å¥ãªè¿é£å±æ§ã®äœæã«ãããJavaèšèªã¬ãã«ã§ãã¹ããããåãåçŽã«åæ ãããããäžè¬çãªã¬ãã«ã«çåãçããããå¹ççãªå®è£
ãå¯èœã«ãªããŸããã
ãã¹ãäž
JVMã®å€§èŠæš¡ãªãã¹ãã»ãããéçºããå¿ èŠããããŸãããã®ãã¹ãã§ã¯ãè¿é£ã®å®è£ çšã«ç¹å¥ã«å°å ¥ããããã€ãã³ãŒãã®ã»ãã³ãã£ã¯ã¹ã®ã¢ã¯ã»ã¹èŠåãšå€æŽããã§ãã¯ããŸãã
åæ§ã«ããªãã¬ã¯ã·ã§ã³ãã¡ãœããåç §ãvar-handlesãããã³JDWPãJVM TIãJNIãªã©ã®æšæºAPIãžã®å€éšã¢ã¯ã»ã¹ã«é¢ããè¿œå ã®ãã¹ããäœæããå¿ èŠããããŸãã
èšèªã§ã®ãã§ãã¯ãæäŸããŠããªããããèšèªã³ã³ãã©ã€ã¢ã³ã¹ã®ãã¹ããäœæããå¿ èŠããããŸããã
Javaã³ã³ãã€ã©ãäžèšã®æ©èœã®äœ¿çšãéå§ãããšããã«ãé©åãªæ©èœãã¹ãèªäœãèšèªãã¹ãããåºçŸããå ŽåããããŸãã
ãªã¹ã¯ãšä»®å®
Javaã³ã³ãã€ã©ãæ©èœããã«ãŒã«ã¯å€åããŠããããããããã®é©æ°ã¯ãã¹ãŠãã¯ã©ã¹ãã¡ã€ã«ã®æ°ããããŒãžã§ã³çªå·ã«é¢é£ä»ããå¿ èŠããããŸãã
JVMã®å€ãããŒãžã§ã³ãšã®åŸæ¹äºææ§ãç¶æããã«ã¯ãJavaã³ã³ãã€ã©ãŒãã¬ã¬ã·ãŒã©ãããŒçæããžãã¯ããµããŒãããå¿ èŠããããŸãã
ãããœãããªã¢ã¯ã»ã¹æš©ã¯äœãå£ããªãã¯ãã§ãã äŸå€ãšããŠãçè«äžãè² ã®ã³ã³ãã©ã€ã¢ã³ã¹ãã¹ãã¯ç Žç¶»ããå¯èœæ§ããããŸãã
äºææ§ã倱ããªã¹ã¯ã¯éåžžã«å°ãããããŸãã¯ãŸã£ãããããŸãããã¢ã¯ã»ã¹ã«ãŒã«ãå³ãããããããããœããã«ããããšãææ¡ããŠããããã§ãã ãŠãŒã¶ãŒãããžãã¯ã©ãããŒã¡ãœããã®ååšããçºèŠããããã®ååšã䜿çšããæ¹æ³ãèŠã€ããå Žåãå€æŽãå°å ¥ããåŸããŠãŒã¶ãŒã¯ãããè¡ãããšãã§ããªããªããŸãã ãŸãããã®ãããªã©ãããŒã«ã¯å®å®ããååããªãããããã®ãªã¹ã¯ã¯éåžžã«å°ãããªããŸãã
ææ¡ãããã«ãŒã«ã¯ç¹å®ã®ã©ã³ã¿ã€ã ããã±ãŒãžå ã§ã®ã¿æ°ããã¢ã¯ã»ã¹æš©ãå²ãåœãŠãããããã©ãããã©ãŒã ã®æŽåæ§ãæãªããªã¹ã¯ã¯éåžžã«å°ãããããããŸããã ã¢ããã¿ã¡ãœããã®å¿ èŠæ§ãæé€ããããšã«ãããåã ã®ãããã¬ãã«ã¯ã©ã¹éã®ã¢ã¯ã»ã¹ã®æ©äŒãäœç³»çã«æžãããŸãã
è¿åæ€èšŒã«ã¯ããããåç¬ã§äœ¿çšãããªãå Žåã§ãããã¹ããããã¡ã³ããŒã®ã³ã³ãããé€ãããããã¬ãã«ã®ã¯ã©ã¹ãå¿ èŠã§ãã ããã¯ããã£ã¹ããªãã¥ãŒã·ã§ã³ããæªäœ¿çšã®ã¯ã©ã¹ãã¹ããŒãããã¹ããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ä»ã®ã·ã¹ãã ãžã®åœ±é¿
JVMä»æ§ã®æ°ãã説æãšãJVMå®è£ ã®å€æŽãå¿ èŠã«ãªããŸãã ããã«ãåå°ãã¡ãœããåç §ãvar-handleãããã³å Žåã«ãã£ãŠã¯JVM TIãJDWPãããã³JNIã®ä»æ§ãšå®è£ ã®å€æŽãå¿ èŠã«ãªããŸãïŒãã ãããã€ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ã¯éåžžãã¢ã¯ã»ã¹æš©ãç¡èŠããŸã-ã»ãšãã©äœãããå¿ èŠããªãããšãå€æããå ŽåããããŸãïŒã
è¿œå ã®ã¢ã¯ã»ã¹ãã§ãã¯ã§ããã©ãŒãã³ã¹ãã©ã®ããã«å€åãããã調ã¹ãå¿ èŠããããŸãã
çŸåšã®Javaã³ã³ãã€ã©ã¯ããœã±ããéã®ã¢ã¯ã»ã¹çšã®ã¢ããã¿ãŒã¡ãœãããçæããŸãã ãã®ããã¥ã¡ã³ãã§ã¯ããããã®çæãåæ¢ããå¿ èŠã¯ãããŸããããããã§ãã圹ã«ç«ããªããªã£ããããã«æšãŠãããšããå§ãããŸãã
JavaãœãŒã¹ãšã¯ã©ã¹ãã¡ã€ã«ãšã®éã®å¯Ÿå¿èŠåã¯ç°¡çŽ åãããŸãã Project Lambdaã¯åãã«ãŒã«ãè€éã«ããŠãããããããã¯éåžžã«ã¿ã€ã ãªãŒã§ãã ãã ãã補åã®äº€å·®ç¹ïŒ JDK-8005122ãªã© ïŒã§ãããã€ãã®åœ±é¿ãçºçãããããæè¿ã®è€éãã®å¢å ã¯éåžžã®æé·ãšã¯èŠãªãããŸããã
ã¢ããã¿ãŒãã¹ããŒãããšãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºããããã«å°ãããªãå ŽåããããŸãã
Pack200ã®ä»æ§ãä¿®æ£ããå¿ èŠãããå ŽåããããŸãã
èè
John Roseã¯ãOracleã®JVMãšã³ãžãã¢ããã³ã¢ãŒããã¯ãã§ãã ãªãŒããšã³ãžãã¢Da Vinci Machine ProjectïŒOpenJDKã®äžéšïŒã ãªãŒããšã³ãžãã¢JSR 292ïŒJavaãã©ãããã©ãŒã ã§ã®åçåä»ãèšèªã®ãµããŒãïŒã¯ãåçåŒã³åºããšãåãããã¡ã€ãªã³ã°ãé«åºŠãªã³ã³ãã€ã©æé©åãªã©ã®é¢é£ãããã¯ãå°éãšããŠããŸãã 以åã¯ãå éšã¯ã©ã¹ã«åãçµãã§ãããSPARCã®å ã®HotSpotããŒããUnsafe APIãäœæããCommon LispãSchemeïŒãeshãïŒãC ++ã®åçãã€ã³ããŒãå«ãå€ãã®åçã䞊åãããã³ãã€ããªããèšèªãéçºããŸããã
翻蚳è
Oleg Chirukhin-ãã®ããã¹ãã®å·çæç¹ã§ã¯ãSberbank-Technologyã®ã¢ãŒããã¯ããšããŠåããŠãããèªååãããããžãã¹ããã»ã¹ç®¡çã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã®éçºã«åŸäºããŠããŸãã Sberbank Technologiesã«å ¥ç€Ÿããåã¯ãæ¿åºãµãŒãã¹ãé»åå»çèšé²ãå«ãããã€ãã®æ¿åºæ å ±ã·ã¹ãã ã®éçºãããã³ãªã³ã©ã€ã³ã²ãŒã ã®éçºã«åå ããŠããŸããã JUG.ruã«ã³ãã¡ã¬ã³ã¹ ïŒJPointãJBreakïŒã®ã¹ããŒã«ãŒã çŸåšã®ç 究察象ã«ã¯ãä»®æ³ãã·ã³ãã³ã³ãã€ã©ãããã°ã©ãã³ã°èšèªãå«ãŸããŸãã