é ãã¯ã©ã¹ãå°å°ãããã¯ã©ã¹ãããã¹ããããã¯ãã¬ã³ãŒããããã³EdDSAïŒJDK15ã«ã¯å€ãã®äŸ¡å€ããããŸãã
ç§ã®å¥œããªè¡šçŸã®1ã€ãèšãããã«ãJava15ã«ã¯è±å¯ãªãã§ã³ã¬ãŒãã®è¯ãããããããããŸããæ°ããããŒãžã§ã³ïŒ2020幎9æ15æ¥ãªãªãŒã¹ïŒã«ã¯ãJDKã®æ¹åãç®çãšãã14ã®éèŠãªå€æŽïŒJEPïŒãå«ãŸããŠããŸãããã®èšäºã§ã¯ãJEPã«å«ãŸããæ å ±ã«åºã¥ããŠãæ°è£œåã®æŠèŠãç°¡åã«èª¬æããŸãã
14JEPã¯5ã€ã®ã°ã«ãŒãã«åããããšãã§ããŸãããã詳现ãªèª¿æ»ã«ã€ããŠã¯ãããããã®ããã¥ã¡ã³ããåç §ããŠãã ããã
æ¯ãåããããªæ°æ©èœïŒ
- JEP 339ïŒãšãã¯ãŒãºã«ãŒãããžã¿ã«çœ²åã¢ã«ãŽãªãºã ïŒEdDSAïŒ
- JEP 371ïŒé ãããã¯ã©ã¹
æ¢åã®JavaSEæšæºæ©èœãžã®è¿œå ïŒ
- JEP 378ïŒããã¹ããããã¯
- JEP 377ïŒZGCã¬ããŒãžã³ã¬ã¯ã¿ãŒ
- JEP 379ïŒã·ã§ãã³ãã¢-äœããŒãºã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒ
åŸæ¥ã®JavaSEæ©èœã®æ¹åïŒ
- JEP 373ïŒå»æ¢ãããDatagramSocketAPIã®ãªãŒããŒããŒã«
ç§ãã¡ã¯æ°è£œåã楜ãã¿ã«ããŠããŸãïŒ
- JEP 360ïŒå°å°ãããã¯ã©ã¹ïŒãã¬ãã¥ãŒïŒ
- JEP 375ïŒinstanceofã®ãã¿ãŒã³ãããã³ã°ïŒ2çªç®ã®ãã¬ãã¥ãŒïŒ
- JEP 384ïŒãšã³ããªãŒïŒç¬¬2ãã©ããïŒ
- JEP 383ïŒå€éšã¡ã¢ãªã¢ã¯ã»ã¹APIïŒ2çªç®ã®ã€ã³ãã¥ããŒã¿ãŒæ©èœïŒ
ãµããŒãã®åé€ãšçµäºïŒ
- JEP 372: Nashorn JavaScript Engine
- JEP 374:
- JEP 381: Solaris SPARC
- JEP 385: RMI
,
ãšãã¯ãŒãºã«ãŒãããžã¿ã«çœ²åã¢ã«ãŽãªãºã ïŒJEP 339ïŒãç§ã¯ãEdwards-Curveããžã¿ã«çœ²åã¢ã«ãŽãªãºã ïŒEdDSAïŒãç§ã®æå·åã®ç¥èãå°ãè¶ ããŠããããšãæåã«èªããŸããããŠãç§ã¯ããã«ã€ããŠäœãç¥ããŸããããã ãããã®JEPã¯ããã©ãããã©ãŒã ã«äŸåããªãEdDSAã®å®è£ ãšããŠèšèšãããŠãããæ¢åã®Cå®è£ ã§ããECDSAãããããã©ãŒãã³ã¹ãåªããŠããŸãã
JDKã®ããã¥ã¡ã³ãã«ãããšãEdDSAã¯ãJDKã®æ¢åã®ã¹ããŒã ã«æ¯ã¹ãŠããã€ãã®å©ç¹ãããææ°ã®æ¥åæ²ç·çœ²åã¹ããŒã ã§ãã
å®è£ ç®æšïŒ
- ãã®JEPã®äž»ãªç®çã¯ãå æšæºãšããŠçœ²åæ¹åŒãå®çŸããããšã§ããRFC 8032ããã ããæ°ããã¹ããŒã ã¯ECDSAã«çœ®ãæãããã®ã§ã¯ãããŸããã
- - EdDSA , ECDSA . , EdDSA, Curve25519 ~126 , , ECDSA, secp256r1 ~128 .
- , . .
ä»ãããªãã¯ç§ãããå€ããç¥ã£ãŠããŸãã EdDSAã«ã€ããŠèª¬æããŠããJavaMagazineã®èšäºãã楜ãã¿ã«ã
é衚瀺ã¯ã©ã¹ïŒJEP 371ïŒã¯ãä»ã®ã¯ã©ã¹ã®ãã€ãã³ãŒãããçŽæ¥åŒã³åºãããšãã§ããªãã¯ã©ã¹ã§ãããããã¯ãå®è¡æã«ã¯ã©ã¹ãåçã«äœæãããªãã¬ã¯ã·ã§ã³ã¡ã«ããºã ãä»ããŠéæ¥çã«äœ¿çšãããã¬ãŒã ã¯ãŒã¯ã§äœ¿çšããããšãç®çãšããŠããŸããåçã«çæãããã¯ã©ã¹ã¯éãããæéããå¿ èŠãšãããªãå¯èœæ§ããããããéçã«çæãããã¯ã©ã¹ã®åç¶æéäžããããä¿æãããšãã¡ã¢ãªãããããªã³ããäžå¿ èŠã«å¢å ããå¯èœæ§ããããŸãã
åçã«çæãããã¯ã©ã¹ãæ€åºã§ããŸããããã®ãããªã¯ã©ã¹ãååã§èŠã€ããããšã¯ãéçã«çæãããã¯ã©ã¹ã®åãªãå®è£ ã®è©³çŽ°ã§ãããšããç®çãæãªããããæ害ã§ãã
é衚瀺ã¯ã©ã¹ã®ãªãªãŒã¹ã¯ãéçºè ãéæšæºAPI sun.misc.Unsafe :: defineAnonymousClassã®äœ¿çšãåæ¢ããããã®åºç€ãç¯ããŸããOracleã¯ãå°æ¥ããã®ã¯ã©ã¹ãåé€ããäºå®ã§ãã
æ¢åã®JavaSEæšæºãžã®è¿œå
Project Amberããã®ããã¹ããããã¯ïŒ JEP 378ïŒã¯ã JDK13ãš14ã®2ã€ã®æ«å®ããŒãžã§ã³ã®åŸã«ãããããªãªãŒã¹ãããŸããããããã®äœæã®ç®çã¯ãJavaã§è€æ°è¡ã®æååãªãã©ã«ã宣èšããŠäœ¿çšããããšã®é£ããã軜æžããããšããéçºè ã®é¡æã§ããã
ããã¹ããããã¯ã¯ãäºæž¬å¯èœãªæ¹æ³ã§æååãèªåçã«ãã©ãŒãããããŸãããããã ãã§ã¯äžååãªå Žåã¯ãéçºè ããã©ãŒããããåŒãç¶ãããšãã§ããŸããäºåæ©èœã®2çªç®ã®ããŒãžã§ã³ã§ã¯ãæ°ããè¡ãšã¹ããŒã¹ãåŠçããããã®2ã€ã®æ°ãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ãå°å ¥ãããŠããŸããããšãã°ã\ <line-terminator>ã¯ãæ°ããè¡ã®æåã®æ¿å ¥ãæ瀺çã«æå¶ããŸãã
以åã¯ã1è¡ã®é·ãããã¹ããå°å·ããã«ã¯ã次ã®ããã«èšè¿°ããå¿ èŠããããŸããã
\ã䜿çšãããšãã³ãŒããèªã¿ããããªããŸãã
\ sãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã¯ãæ«å°Ÿã®ã¹ããŒã¹ãåé€ãããã®ãé²ãããšãã§ããŸãããããã£ãŠã次ã®ããã¹ãã¯3è¡ãè¡šããŠãããåè¡ã¯æ£ç¢ºã«5æåã§æ§æãããŠããŸãïŒäžå€®ã®è¡ã®ç·è²ã«å¯Ÿå¿ãã\ sã¯ãã§ã«5æåå«ãŸããŠããããã䜿çšãããŠããŸããïŒã
ZGCã¬ããŒãžã³ã¬ã¯ã¿ãŒïŒJEP 377ïŒã¯ãå®éšçãªæ©èœãšããŠJDK11ã§å°å ¥ãããŸãããçŸåšãæ£åŒãªã¹ããŒã¿ã¹ãååŸããŠããŸãã ZGCã¯ã䞊åã®NUMA察å¿ã®ã¹ã±ãŒã©ãã«ãªã¬ããŒãžã³ã¬ã¯ã¿ã§ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®åŸ ã¡æéãçããªããŸãïŒãã«ããã©ãã€ãã®ããŒãã§ã10ããªç§æªæºïŒã Oracleã«ãã£ãŠãã¹ããããå¹³åäŒæ¢æéã¯ã1ããªç§æªæºã§ãããæ倧ã¯2ããªç§æªæºã§ããå³1ã¯ãJava䞊åã¬ããŒãžã³ã¬ã¯ã¿ãŒG1ãšZGCããZGCäžæåæ¢æéã10åã«å¢å ããç¶æ ã§æ¯èŒããŠããŸãã
å³1.ã¬ããŒãžã³ã¬ã¯ã¿ã®äžæåæ¢æéã®æ¯èŒ
ãã ããå€ãã®ã¯ãŒã¯ããŒãã§ã¯ãG1ïŒããã¯ãŸã ããã©ã«ãã§ãïŒãZGCããããããã«éãå ŽåããããŸãããŸãããããæ°çŸã¡ã¬ãã€ãã®ãããªéåžžã«å°ããªããŒãã®å ŽåãG1ãé«éã«ãªãå¯èœæ§ããããŸãããããã£ãŠãç¬èªã®è² è·ã䜿çšããŠç¬èªã®ãã¹ããå®è¡ãã䜿çšããã¬ããŒãžã³ã¬ã¯ã¿ãŒã確èªããããšããå§ãããŸãã
éèŠïŒZGCã¯å®éšçã§ã¯ãªããªã£ãããïŒOracleOpenJDKãã«ãããã³OracleJDKã«å«ãŸããŠããŸãïŒã-XXïŒ+ UnlockExperimentalVMOptionsã䜿çšããŠã¢ã¯ãã£ãåããå¿ èŠã¯ãããŸããã
ã·ã§ãã³ãã¢ïŒJEP 379ïŒäžéšã®OpenJDKãã«ãã§äœ¿çšã§ããã¬ããŒãžã³ã¬ã¯ã¿ãŒã®å¥ã®ããªã¢ã³ãã§ããJDK 12以éãå®éšçã§ããçŸåšãZGCãšåæ§ã«ãXXïŒ+ UnlockExperimentalVMOptionsã¯å¿ èŠãããŸããã
åŸæ¥ã®JavaSEæ©èœã®ææ°å
éæšå¥šã®DatagramSocketAPIïŒJEP 373ïŒãäœãçŽããŸããããã®JEPã¯ãjava.net.DatagramSocketããã³java.net.MulticastSocket APIã®å€ããä¿å®ãå°é£ãªå®è£ ããä¿å®ãšãããã°ã容æãªãããã·ã³ãã«ã§ææ°ã®å®è£ ã«çœ®ãæãããããããã¯åºæ¬çã«äžéšã®ãžã¥ã©çŽã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšèããŠãã ããã ProjectLoomä»®æ³ã¹ããªãŒã ãæäœããŸãã
å€ãAPIïŒJDK 1.0以éïŒã䜿çšããã³ãŒããå€æ°ãããããå»æ¢ãããå®è£ ã¯åé€ãããŸãããå®éãæ°ããJDKåºæã®ã·ã¹ãã ããããã£jdk.net.usePlainDatagramSocketImplã¯ãAPIãªãã¡ã¯ã¿ãªã³ã°ãååž°ãã¹ãã§åé¡ãåŒãèµ·ããå ŽåããŸãã¯å Žåã«ãã£ãŠã¯ãéæšå¥šã®å®è£ ã䜿çšããããã«JDKãæ§æããŸãã
æ°è£œåã楜ãã¿ã«ããŠããŸã
å°å°ãããã¯ã©ã¹ïŒJEP 360ïŒã ProjectAmberã§äœæãããæåã®ãã¬ãããã¯ã·ã§ã³ããŒãžã§ã³ãå°å°ãããã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ãŒã¹ã¯ããããã®æ¡åŒµãŸãã¯å®è£ ãä»ã®ã¯ã©ã¹ã«å¶éããŸããã©ãããŠãããéèŠã§ããïŒéçºè ã¯ãç¹å®ã®ã¯ã©ã¹ãŸãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ãæ åœããã³ãŒãã管çãããå ŽåããããŸããå°å°ãããã¯ã©ã¹ã¯ãã¹ãŒããŒã¯ã©ã¹ã®äœ¿çšãå¶éããããã®ã¢ã¯ã»ã¹ä¿®é£Ÿåããã宣èšçãªæ¹æ³ãæäŸããŸããäŸãã°ïŒ
ã¯ã©ã¹ãå°å°ããç®çã¯ãã©ã®ãµãã¯ã©ã¹ãèš±å¯ãããŠããããã¯ã©ã€ã¢ã³ãã³ãŒãã«ç¥ãããããšã§ããçµå±ã®ãšãããã¯ã©ã¹ïŒãŸãã¯ã€ã³ã¿ãŒãã§ã€ã¹ïŒã®å ã®å®çŸ©ãå®å šã«ç¶²çŸ çã§ãããšäºæ³ãããéçºè ããããå¶åŸ¡äžèœã«æ¡åŒµããããšãèš±å¯ããªãå ŽåããããŸã-æ瀺çã«æå®ãããã¯ã©ã¹ã®ã¿ãå¯èœã§ãã
å°å°ãããã¯ã©ã¹ã«ã¯ããã€ãã®å¶éããããŸãã
- å°å°ãããã¯ã©ã¹ãšãã®èš±å¯ããããµãã¯ã©ã¹ã¯ãåãã¢ãžã¥ãŒã«å ã«ããå¿ èŠããããŸããååã®ãªãã¢ãžã¥ãŒã«ã§å®£èšãããŠããå Žåã¯ãåãããã±ãŒãžã«é 眮ããå¿ èŠããããŸã
- èš±å¯ããããã¹ãŠã®ãµãã¯ã©ã¹ã¯ãå°å°ãããã¯ã©ã¹ãçŽæ¥æ¡åŒµããå¿ èŠããããŸã
- , , , â final, sealed nonsealed ( )
instanceofã®ãã¿ãŒã³ãããã³ã°ïŒJEP 375ïŒã 2çªç®ã®ãã¬ãã¥ãŒã¯ãProjectAmberããã®å¥ã®éçºã§ããæ©èœã®æåã®æ«å®ããŒãžã§ã³ã¯Java14ã§ãããããã«æ¯ã¹ãŠå€æŽã¯ãããŸããã
ç®æšã¯ãinstanceofæŒç®åã®ãã¿ãŒã³ãããã³ã°ãéããŠJavaãæ¹åããããšã§ããããã«ãããããã°ã©ã å ã®äžè¬çãªããžãã¯ãã€ãŸããªããžã§ã¯ãããã®ã³ã³ããŒãã³ãã®æ¡ä»¶ä»ãæœåºãããç°¡æœãã€å®å šã«è¡šçŸã§ããŸããäŸãšããŠãMalGuptaã®åªããèšäºãJava14ã§ã®instanceofã®ãã¿ãŒã³ãããã³ã°ããåç §ããŠã¿ãŸãããã
ãšã³ããªãŒïŒJEP 384ïŒã2çªç®ã®ãã©ãããã¬ã³ãŒãã¯ãäžå€ããŒã¿ã®ééçãªãã£ãªã¢ãšããŠæ©èœããã¯ã©ã¹ã§ããæ°ããJEPã«ã¯ãã³ãã¥ããã£ãã£ãŒãããã¯ã«åºã¥ã説æãå«ãŸããŠãããããŒã«ã«ã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ã€ã¹ã®ããã€ãã®æ°ããè¿œå 圢åŒããµããŒããããŠããŸãããšã³ããªãŒããããžã§ã¯ãã¢ã³ããŒããæ¥ãŠããŸãã
ã¬ã³ãŒãã¯ãå€ã®åçŽãªéèšãè¡šããªããžã§ã¯ãæåã®æ§æã§ãããããã£ãŠãããã°ã©ããŒãæ¡åŒµå¯èœãªåäœã§ã¯ãªããäžå€ã®ããŒã¿ã®ã¢ããªã³ã°ã«éäžã§ããããã«ããŸããã¬ã³ãŒãã¯ãequalsãaccessorsãªã©ã®ããŒã¿é§ååã¡ãœãããèªåçã«å®è£ ããŸãããšã³ããªã¯ãåç®äžã®åæå®ã移è¡ã®äºææ§ãªã©ãé·å¹Žã®Javaã®ååãä¿æããŸããã€ãŸããäžå€ã®ããŒã¿ãå«ãã¯ã©ã¹ã®ã³ãŒãã£ã³ã°ãšèªã¿åãã容æã«ãªããŸãã
å€éšã¡ã¢ãªã¢ã¯ã»ã¹ïŒJEP 383ïŒã¯ãJavaããã°ã©ã ãJavaããŒãã®å€éšã®å€éšã¡ã¢ãªã«å®å šãã€å¹ççã«ã¢ã¯ã»ã¹ã§ããããã«ããAPIã®2çªç®ã®ã€ã³ãã¥ããŒã¿ãŒããŒãžã§ã³ã§ããç®æšã¯ãjava.nio.ByteBufferãšsun.misc.Unsafeã®çœ®ãæããéå§ããããšã§ããããã¯ãJavaãšä»ã®APIéã®éä¿¡ãæ¹åããPanamaãããžã§ã¯ãã®äžéšã§ãã
JEPã¯ããã®ã€ãããŒã·ã§ã³ã®å¿ èŠæ§ã次ã®ããã«é©åã«èª¬æããŠããŸãã
å€éšã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã«é¢ããŠãéçºè ã¯ãžã¬ã³ãã«çŽé¢ããŠããŸããByteBufferAPIãªã©ãå®å šã§ãããå¶éãããïŒããããå¹çã®äœãïŒãã¹ãéžæããå¿ èŠãããã®ãââããããšãã»ãã¥ãªãã£ä¿èšŒãæŸæ£ããå±éºã§ãµããŒããããŠããªãå®å šã§ãªãAPIãæ¡çšããŸããïŒ
ãã®JEPã¯ãå€éšã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããã®å®å šã§ä¿å®ã容æã§å¹ççãªAPIãå°å ¥ããŠããŸããå€éšã¡ã¢ãªã¢ã¯ã»ã¹ã®åé¡ã«çãçµã£ããœãªã¥ãŒã·ã§ã³ãæäŸããããšã«ãããéçºè ã¯æ¢åã®APIã®å¶éãå±éºãã解æŸãããŸãããŸããæ°ããAPIã¯JITã®æé©åã念é ã«çœ®ããŠãŒãããèšèšãããŠãããããããã©ãŒãã³ã¹ãåäžããŸãã
åé€ãšãµããŒãã®çµäº
ãããã®æ±ºå®ã¯ã©ããç©è°ãéžããã®ã§ãã£ãŠã¯ãªããŸããã
Nashorn JavaScriptãšã³ãžã³ã®åé€ïŒJEP 372ïŒããã®ãšã³ãžã³ããã®APIãããã³jjsããŒã«ã¯Java11ã§éæšå¥šã«ãªããŸãããããããªããèšãæãæ¥ãŸãããäºçŽæžã¿
ããã¯ã®ç¡å¹åãšåé€ïŒJEP 374ïŒã¯ãHotSpot JVMã§äœ¿çšãããŠããå€ãæé©åææ³ãåé€ããŠããã§ãã¯ãããŠããªãããã¯ã«é¢é£ãããªãŒããŒããããåæžããŸãããã®ããã¯ã«ããããããŸã§åŸæ¥ã®ããã¯æ¹æ³ã«æ¯ã¹ãŠããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸããããéå»ã«èŠãããããã©ãŒãã³ã¹ã®åäžã¯ãä»æ¥ã§ã¯ããã»ã©æçœã§ã¯ãããŸãããææ°ã®ããã»ããµã§ã¢ãããã¯åœä»€ãå®è¡ããã³ã¹ãã¯äœäžããŸããã
åé·ãªããã¯ã¯å€ãã®è€éãªã³ãŒããããããããã®è€éãã«ãããJavaéçºããŒã ãåæãšã³ãžã³ã«å€§å¹ ãªå€æŽãå ããããšãã§ããªããªããŸãããããã¯ãç¡å¹ã«ããå床æå¹ã«ããã®ã¯ããã°ã©ããŒã«ä»»ããããšã§ãJavaéçºããŒã ã¯ãå°æ¥ã®ãªãªãŒã¹ã§ããã¯ãå®å šã«åé€ããã®ãè³¢æãã©ãããå€æããããšèããŠããŸãã
Solarisããã³SPARCããŒãã®åé€ïŒJEP 381ïŒããã®å ŽåãSolarisãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã³SPARCã¢ãŒããã¯ãã£ã«åºæã®ãã¹ãŠã®ãœãŒã¹ã³ãŒããåé€ãããŸãããã以äžèšãããšã¯ãããŸããã
åŸã§ã¢ã³ã€ã³ã¹ããŒã«ããããã«RMIã¢ã¯ãã£ããŒã·ã§ã³ãé€å€ããŸãïŒJEP 385ïŒã Java 8ã§ãªãã·ã§ã³ã§ãã£ããªã¢ãŒãã¡ãœããã®åŒã³åºãã®å»æ¢ãããéšåãåé€ããããšã«ãããJavaãç°¡çŽ åããŸã
ãRMIã¢ã¯ãã£ããŒã·ã§ã³ã®äœ¿çšãåæžãããŸãã JavaããŒã ã¯ãJavaããŒã ã䜿çšããŠæ°ããã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã蚌æ ã¯ãªããRMIã¢ã¯ãã£ããŒã·ã§ã³ã䜿çšããŠããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã¯ã»ãšãã©ãªããšãã蚌æ ããããŸããããŸããŸãªãªãŒãã³ãœãŒã¹ã³ãŒãããŒã¹ãæ€çŽ¢ãããšãããããã«é¢é£ããAPIã«ã€ããŠã¯ã»ãšãã©èšåãããŠããŸããã§ãããå€éšã§çæãããRMIã¢ã¯ãã£ããŒã·ã§ã³ãšã©ãŒã®å ±åã¯æ°å¹ŽéãããŸããã
Javaãã©ãããã©ãŒã ã®äžéšãšããŠRMIã¢ã¯ãã£ããŒã·ã§ã³ããµããŒãããã«ã¯ãç¶ç¶çãªã¡ã³ããã³ã¹ã³ã¹ããããããŸããããã«ãããRMIãè€éã«ãªããŸããRMIã®æ®ãã®éšåã«åœ±é¿ãäžããããšãªããRMIã®ã¢ã¯ãã£ãåãåé€ã§ããŸãããããåé€ããŠããJavaã®éçºè ã®äŸ¡å€ã¯äœäžããŸããããJDKã®é·æçãªä¿å®ã³ã¹ãã¯åæžãããŸãã
çµè«
Java 15ã¯6ãæã®ãªãªãŒã¹ãµã€ã¯ã«ãç¶ç¶ããã»ãšãã©ã®éçºè ã«åœ¹ç«ã€äžèŠæš¡ã®ãªãªãŒã¹ã§ãã