Habréã®ãã°ãããã€ã³ã¿ãã¥ãŒããïŒãSimon Ritterã¯æåããJavaã«åãçµãã§ãããZing JVMä»®æ³ãã·ã³ã«åãçµãã§ãããæé«ã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒã®1ã€ã§ããAzulã®å¯ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒãšããŠç¶ç¶çã«ãããè¡ã£ãŠããŸããã³ã¬ã¯ã¿ãŒïŒÂ»
以äžã¯ãJDK 12ã®æ°ããæ©èœãšãæ°ãããã«ãã«ç§»è¡ãããšãã«çºçããå¯èœæ§ãããããã€ãã®åé¡ã«é¢ãã圌ã®èšäºã®ç¿»èš³ã§ãã
ææ°ã®JavaãªãªãŒã¹ïŒ JDK 10 ã JDK 11 ïŒã®ãã¹ãŠã®å€æŽç¹ããªã¹ãããããã€ãã®ããã°æçš¿ãæžããŸããã ããã§ãJDK 12ã®ããŒã¯ãµã€ãã«ã€ããŠèª¬æããŸããã¢ããªã±ãŒã·ã§ã³ããã®ããŒãžã§ã³ã«ç§»æ€ããå Žåã«åé¡ãåŒãèµ·ããå¯èœæ§ãããããã€ãã®èœãšãç©Žã«çŠç¹ãåœãŠãŸãã
JDK 12ã«ã¯ããããŸã§ã®ãã¹ãŠã®JavaãªãªãŒã¹ã®äžã§æãå°ãªãæ°ã®æ°æ©èœããããŸãïŒJDK 10ã§ã¯109ãJDK 11ã§ã¯90ãã«ãŠã³ãããŸããïŒã ããã¯æªãããšã§ã¯ãããŸãã-ãªãªãŒã¹ãµã€ã¯ã«ã«ãããããŒãžã§ã³ã«ãã£ãŠã¯ããå€ãã®å€æŽãå«ãŸããäžéšã¯ããå°ãªãå€æŽãå«ãŸããŸãã
Javaãã©ã€ãã©ãªãJVMããã®ä»ã®JDKé¢æ°ãªã©ãæ°ããé¢æ°ãæ確ãªè«çé åã«åå²ããŸãã
èšèªã®å€æŽ
ç§ïŒããã³ä»ã®å€ãã®äººã
ïŒãJDK 12ã§æã泚ç®ãã¹ããšèããæ©èœã¯ãæ°ããswitchã¹ããŒãã¡ã³ãïŒ JEP 325 ïŒã§ãã ããã¯ãããã¬ãã¥ãŒãã®æ©èœãšããŠäœ¿çšãããæåã®èšèªå€æŽã§ããããŸãã ããã¬ãã¥ãŒãã®ã¢ã€ãã¢ã¯ã JEP 12ã®äžéšãšããŠ2018幎åé ã«å°å
¥ãããŸããã ããã¯åºæ¬çã«ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã䜿çšããŠæ°æ©èœã®ããŒã¿çãæå¹ã«ããæ¹æ³ã§ãã ãã¬ãã¥ãŒã䜿çšãããšããŠãŒã¶ãŒã®ãã£ãŒãããã¯ã«åºã¥ããŠå€æŽãå ããããšãã§ããŸããææªã®å Žåãæ£ããåä¿¡ãããªãã£ãå Žåã¯ãé¢æ°ãå®å
šã«åé€ããŸãã æ©èœããã¬ãã¥ãŒããããã®éµã¯ãããããJava SEä»æ§ã«å«ãŸããŠããªãããšã§ãã æ°ããã¹ã€ããã«ã€ããŠã¯ãHabré ã«éåžžã«åªãã翻蚳ããããŸãã
JDK 12ã§ã¯ãã¹ã€ããã¯ãã³ã³ãã³ãããè©äŸ¡ããŠçµæãçæããåŒã«ãªããŸããã ããã¯ãäžäœäºææ§ã«åœ±é¿ãäžããªãããšãããã«èª¬æããŸãããããã£ãŠãã¹ã€ãããæŒç®åãšããŠäœ¿çšããã³ãŒããå€æŽããå¿
èŠã¯ãããŸããã
JEPã®äŸã䜿çšããŸããããã¯åçŽã§æ確ãªããã§ãã
int numLetters; switch (day) { case MONDAY: case FRIDAY: case SUNDAY: numLetters = 6; break; case TUESDAY: numLetters = 7; break; case THURSDAY: case SATURDAY: numLetters = 8; break; case WEDNESDAY: numLetters = 9; break; default: throw new IllegalStateException("Huh? " + day); }
ã芧ã®ãšãããææ¥ãå€æ°day
ååã«ãããã³ã°ããŠãããå€numLetters
å²ãåœãŠãŸãã switchã¯æŒç®åã«ãªã£ãã®ã§ãswitchã¹ããŒãã¡ã³ãã®çµæã䜿çšããŠå²ãåœãŠã1åå®è¡ã§ããŸãïŒãšã©ãŒã³ãŒãã®å¯èœæ§ã倧å¹
ã«æžãããŸãïŒã
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; default -> throw new IllegalStateException("Huh? " + day); };
2ã€ã®æ§æã®å€æŽãããã«ããããŸãã OpenJDKéçºè
ã¯ãã«ã³ãåºåããªã¹ããšåŒã°ããããŸãç¥ãããŠããªãæ§æé¢æ°ã«åºããããŸããã ãŸããã©ã ãåŒæŒç®å->
ãããšãå€ãç°¡åã«è¿ãããšãã§ããŸãã æ¬åœã«ãããå¿
èŠãªå Žåã¯ãå€ãæå®ããŠbreak
ã䜿çšã§ããŸãã ãã®æ©èœã«ã¯ä»ã«ãããã€ãã®è©³çŽ°ããããŸãããããããJEPã®æ¹ãèªã¿ãããã§ãããã
å³æžé€š
ãšãŠã䟿å©ã ãšæãå€æŽã1ã€ãããŸãã äºæ¬¡çãªãã®ãããã€ããããŸãã
ãã£ãŒã³ã¬ã¯ã¿ãŒ
Streams APIã«ã¯ãéåžžã©ãããCollectorsãŠãŒãã£ãªãã£ã¯ã©ã¹ã«ãã£ãŠæäŸãããæ°ããã³ã¬ã¯ã¿ãŒããããŸãã æ°ããã³ã¬ã¯ã¿ãŒã¯ã teeing()
ã¡ãœããã䜿çšããŠååŸã§ããŸãã ãã£ãŒã€ã³ã°ã³ã¬ã¯ã¿ãŒã¯ã2ã€ã®ã³ã¬ã¯ã¿ãŒãš1ã€ã®ãã€ãã¡ã³ã¯ã·ã§ã³ãšãã3ã€ã®åŒæ°ãåããŸãã ãã®ã³ã¬ã¯ã¿ãŒã®ä»äºãç解ããããã«ã Habréã«é¢ãããã®èšäºããå§ãããŸã ã
圌ããããè¡ãæ¹æ³ãç解ããããã«ãå³ãæããŸããã
å ¥åã¹ããªãŒã ããã®ãã¹ãŠã®å€ã¯ãåã³ã¬ã¯ã¿ãŒã«æž¡ãããŸãã åã³ã¬ã¯ã¿ãŒã®çµæã¯åŒæ°ãšããŠBiFunctionã«æž¡ãããæçµçµæãçæããŸãã
ç°¡åãªäŸã¯ãå¹³åå€ã®èšç®ã§ãïŒã¯ãã averagingInt()
ãããªã³ã¬ã¯ã¿ãŒãæ¢ã«ååšããããšã¯ç¥ã£ãŠããŸãããããã¯æŠå¿µãç解ããã®ã«åœ¹ç«ã€ç°¡åãªäŸã§ãïŒã
/* Assume Collectors is statically imported */ double average = Stream.of(1, 4, 2, 7, 4, 6, 5) .collect(teeing( summingDouble(i -> i), counting(), (sum, n) -> sum / n) );
æåã®ã³ã¬ã¯ã¿ãŒã¯å ¥åã¹ããªãŒã ã®åèšãèšç®ãã2çªç®ã®ã³ã¬ã¯ã¿ãŒã¯èŠçŽ ã®æ°ãèšç®ããŸãã BiFunctionã¯ãåèšãèŠçŽ æ°ã§é€ç®ããŠå¹³åå€ãååŸããŸãã
java.io
InputStream skipNBytes(long n)
-å
¥åã¹ããªãŒã InputStreamããæ£ç¢ºã«nãã€ããã¹ãããããŠç Žæ£ããŸãã nããŒã以äžã®å Žåããã€ãã¯ã¹ããããããŸããã
java.lang
æ°ããããã±ãŒãžjava.lang.constantãç»å ŽããŸãããããã¯ãäžå®ã®JVM API JEP 334ã®äžéšã§ãã
åJavaã¯ã©ã¹ãã¡ã€ã«ã«ã¯ãã¯ã©ã¹å
ã®ãã€ãã³ãŒãåœä»€ã®ãªãã©ã³ããæ ŒçŽããæ°žç¶ããŒã«ããããŸãã éçºè
ãã¯ã©ã¹ãããŒãããéã®åé¡ã«ãããã¯ã©ã¹ãã¡ã€ã«ãæäœããããšã¯å°é£ã§ãã å®æ°JVM APIã¯ãå®æ°ã®å圢åŒïŒã¯ã©ã¹ãããŒãå¯èœå®æ°ã MethodHandle
ã MethodHandle
å®æ°ã MethodType
å®æ°ïŒãèšè¿°ããããã®èšå·åç
§åãæäŸããŸãã
ãŸããä»ã®ããã€ãã®ã¯ã©ã¹ã«ã圱é¿ãäžããŸããã 次ã®ãã¹ãŠã®ã¯ã©ã¹ã«describeConstable()
ã¡ãœãããè¿œå ãããŸããã
- ã¯ã©ã¹
- ããã«
- åæå
- ãããŒã
- æŽæ°
- é·ã
- ã²ã
- ã¡ãœãããã³ãã«
- MethodType
- ãŽã¡ãŒãã³ãã«
ã€ã®ãªã¹äººãšããŠãç§ã¯ãããããªãããããããšæããŸãã Constableã describeConstable
ãšããçšèªã¯11äžçŽãã䜿çšãdescribeConstable
ããããç§ãã¡ããã°ãã°èŠå¯å®ãæãæ¹æ³ã§ãã ãŸãã18äžçŽã®æåãªèžè¡å®¶ããžã§ã³ã³ã³ã¹ã¿ãã«ã®ååã§ããããŸãã ããã«ããã describeTurner()
ã¡ãœãããå°æ¥ã®ããŒãžã§ã³ã«æèŒããããã©ããçåã«æããŸãã æããã«ããã®å Žåãããã¯Constant Table
ç¥èªã§ãããæ³åå®ã颚æ¯ç»å®¶ãšã¯é¢ä¿ãããŸããã
次ã®ã¯ã©ã¹ã«ã¯ã resolveConstantDesc()
ã¡ãœãããå«ãŸããŠããŸãã
- ããã«
- Enum.EnumDesc
- ãããŒã
- æŽæ°
- é·ã
- ã²ã
java.lang.Character
å éšã¯ã©ã¹ãæŽæ°ãããæ°ããUnicodeãããã¯ãå«ãŸããããã«ãªããŸããã ç§ã¯ãã€ã人ã ããŠãã³ãŒãã«è¿œå ãããã®ãèŠã€ããããšæã£ãŠããŸããããã«ããã€ãã®äŸã瀺ããŸãïŒ
- ãã§ã¹ã®ã·ã³ãã«
- ãã€ã®æ°å
- Sogdianã¯ã11äžçŽã«äœ¿çšãäžæ¢ãããã€ã©ã³æ±éšã®èšèªã§ãã
- Old Sogdianã¯ãSogdianã®å€ãããŒãžã§ã³ïŒããã³ãããã«éå®ãããŠãããšæãããŸãïŒã§ãã
java.lang.Class
arrayType()
ã¯ããã®Class
ã«ãã£ãŠã³ã³ããŒãã³ãã¿ã€ããèšè¿°ãããŠããé
åã®ã¿ã€ãã®Class
ãè¿ããŸãã ããã¯jshell
ã䜿çšããŠç¢ºèªã§ããŸãã
jshell> (new String[2]).getClass().getName() $11 ==> "[Ljava.lang.String;" jshell> (new String[2]).getClass().arrayType() $12 ==> class [[Ljava.lang.String; jshell> "foo".getClass().arrayType() $15 ==> class [Ljava.lang.String;
ãã®ã¡ãœãããäœãæå³ããã®ãã¯ããããããŸããããªããªãããã®ã¯ã©ã¹ãè¡šãåã«Class
ãè¿œå ããã ãã ããã§ãã
componentType()
ã getComponentType()
ãšåãã§ãã 質åãå§ãŸã-ãªãåé·ãªæ¹æ³ãè¿œå ããã®ãïŒ
descriptorString()
-åã³ã getName()
ãšåãçµæãè¿ããŸãã ãã ãã Class
ã¯æ°ããå®æ°JVM APIã«é¢é£ä»ããããTypeDescriptor
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããTypeDescriptor
ãªã£ããããå¿
èŠã§ãã
lava.lang.String
indent()
-æååã«äžé£ã®å
è¡ã¹ããŒã¹ãè¿œå ããŸãã ãã©ã¡ãŒã¿ãè² ã®å Žåããã®æ°ã®å
è¡ã¹ããŒã¹ã¯åé€ãããŸãïŒå¯èœãªå ŽåïŒã
transform()
-æå®ãããé¢æ°ãæååã«é©çšããŸãã çµæã¯æååã§ã¯ãªãå ŽåããããŸãã
java.lang.invoke
VarHandle
ãã³ã³ãã¯ããªèª¬æãè¿ãtoString()
ãVarHandle
ã
java.net.SecureCacheResponse
ããã³java.net.ssl.HttpsConnection
ã¯ãæ¥ç¶ã§äœ¿çšãããSSLSession
ãå«ãOptional
ãè¿ãæ°ããã¡ãœããgetSSLSession()
ãããŸãã
java.nio.files
Files
ã¯ã©ã¹ã«ã¯ã2ã€ã®ãã¡ã€ã«ã®ã³ã³ãã³ãã®æåã®äžäžèŽãã€ãã®äœçœ®ãæ€çŽ¢ããŠè¿ãæ°ããã¡ãœããã mismatch()
ããããŸããäžäžèŽããªãå Žåã¯-1Lã§ãã
java.text
æ°ããã¯ã©ã¹CompactNumberFormat
ãŸãã ããã¯ãã³ã³ãã¯ã圢åŒã§10é²æ°ããã©ãŒãããããNumberFormat
ãµãã¯ã©ã¹ã§ãã ã³ã³ãã¯ããªãã©ãŒã ã®äŸ1M
代ããã«1000000
ãããã£ãŠã9æåã§ã¯ãªã2æåãå¿
èŠã§ãã NumberFormat
ããã³java.text.spi.NumberFormatProvider
ãæ¡åŒµãããæ°ããgetCompactNumberInstance()
ã¡ãœãããå«ãŸããããã«ãªããŸããã ãŸããLONGãšSHORTã®2ã€ã®æå³ãæã€æ°ããåæåNumberFormatStyle
ãããNumberFormatStyle
ã
java.util.concurrent
CompletionStageã«ã¯ã3ã€ã®ã¡ãœãããæã€ããã€ãã®ãªãŒããŒããŒãããããã©ãŒã ãå«ãŸããŠããŸãã
- äŸå€çã«éåæ
- 䞊å€ããŠ
- äŸå€çã«ComposeAsync
ãããã®ã¡ãœããã¯ãæ¢åã®CompletionStage
ããæ°ããCompletionStage
ãäœæããå¯èœæ§ãæ¡åŒµããŸããçŸåšã®CompletionStage
äŸå€ã§çµäºããå Žåã 詳现ã«ã€ããŠã¯ãAPIããã¥ã¡ã³ãã確èªããŠãã ããã
javax.crypto
Cipher
ã¯ã©ã¹ã«ã¯ã Cipher
å€æãã¢ãŒããããã³ãããã€ããŒãå«ãæååãè¿ãæ°ããtoString()
ã¡ãœããããããŸãã
javax.naming.ldap.spi
ããã¯JDK 12ã®æ°ããããã±ãŒãžã§ãããLDAPæäœäžã®DNSã«ãã¯ã¢ããã®ãããã€ããŒã¯ã©ã¹ã§ããLdapDnsProviderResults
ãšãLDAP URLã®DNSã«ãã¯ã¢ããçµæãã«ãã»ã«åããLdapDnsProvider
2ã€ã®ã¯ã©ã¹ãå«ãŸããŠããŸãã
ã¹ã€ã³ã°
Swingã¯ãŸã æŽæ°äžã§ãïŒ ã¯ãã filechooser.FileSystemView
æ°ããgetChooserShortcutPanelFiles()
ã¡ãœãããgetChooserShortcutPanelFiles()
ã ããã©ã«ãã§ãã¡ã€ã«éžæã·ã§ãŒãã«ããããŒã«è¡šç€ºããå€ãè¡šããã¡ã€ã«ã®é
åãè¿ããŸãã
JVMã®å€æŽ
JEP 189ïŒã·ã§ãã³ã㌠ïŒäžæåæ¢æéã®çãã¬ããŒãžã³ã¬ã¯ã¿ãŒ
Shenandoahã¯2014幎ã«Red Hatã«ãã£ãŠçºè¡šãããç 究ãããžã§ã¯ãã§ãJVMã§ã®ã¡ã¢ãªç®¡çã®ããã®äœã¬ã€ãã³ã·ã¢ããªã±ãŒã·ã§ã³èŠä»¶ã«çŠç¹ãåœãŠãŠããŸãã ãã®ç®æšã¯ã20 GBãè¶
ããããŒãã®æ倧äŒæ¢æé1..10ããªç§ïŒ ãããã£ãŠãå°èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³åãã§ã¯ãããŸãã -Shenandoahã®éçºè
ã®äžäººãçããããã« ãããã¯ããã§ã¯ãªããå°ããªã¢ããªã±ãŒã·ã§ã³ã§çŽ æŽãããä»äºãããŸãïŒã ãã®ã³ã¬ã¯ã¿ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã¹ã¬ãããšäžŠè¡ããŠåäœããããã«èšèšãããŠãããããã»ãšãã©ã®ã¬ããŒãžã³ã¬ã¯ã¿ãŒã§çºçããåé¡ãåé¿ã§ããŸãã
JEP 344ïŒæ··åG1ã³ã¬ã¯ã·ã§ã³
ãã®å€æŽã¯ãG1ã³ã¬ã¯ã¿ãŒãèšå®ãããé 延ç®æšã«å°éãããšãã®G1ã³ã¬ã¯ã¿ãŒã®åäœãæ¹åããããšãç®çãšããŠããŸãã G1ã¯ãããŒãã¹ããŒã¹ïŒå€ããã®ãšå€ããã®ã®äž¡æ¹ïŒãé åã«åå²ããŸãã å€ãäžä»£ã§ã¯ã1åã®æäœã§ã¬ããŒãžãåéããå¿ èŠããªããšããèãæ¹ã§ãã G1ãã¬ããŒãžãåéããå¿ èŠãããå ŽåãG1ã¯å®çŸ©ããé åãéžæããŸãã ããã¯ã³ã¬ã¯ã·ã§ã³ããããšåŒã°ããŸãã JDK 12ããåã®ã»ããã§äœæ¥ãéå§ããããšãããã¹ãŠã®äœæ¥ã¯åºæ¬çã«ã¢ãããã¯æäœãšããŠå®äºããªããã°ãªããŸããã§ããã åé¡ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãé åã®äœ¿çšæ³ã®å€æŽã«ãããã³ã¬ã¯ã·ã§ã³ã»ããã倧ããããŠåéã«æéãããããããŠãäžæåæ¢æéãéæãããªãããšããã£ãããšã§ãã
JDK 12ã§ã¯ãG1ããã®ç¶æ³ãèå¥ããå Žåããããã¢ããªã±ãŒã·ã§ã³ãæ°ãããªããžã§ã¯ãã«ã¹ããŒã¹ãå²ãåœãŠç¶ããèœåã«åœ±é¿ããªãå ŽåãããŒã¿åéãéäžã§äžæããŸãã G1ã®æçµçãªå¹æã¯ãçãäžæåæ¢æéã«éãããšæ¹åãããŸãã
JEP 346ïŒG1ããæªäœ¿çšã®å²ãåœãŠæžã¿ã¡ã¢ãªããã°ããè¿ã
ããã¯G1ã®ãã1ã€ã®ããã©ãŒãã³ã¹åäžã§ããããã1ã€ã¯ãJVMãã·ã¹ãã ã®ä»ã®éšåãšå¯Ÿè©±ããæ¹æ³ã«é¢é£ããŠããŸãã æããã«ãJVMããŒãã«ã¯ã¡ã¢ãªãå¿ èŠã§ãããèµ·åæã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ä»®æ³ã¡ã¢ãªã¢ãã±ãŒã¿ã«ã¡ã¢ãªãèŠæ±ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãããŒãã«å¿ èŠãªã¡ã¢ãªéãäœäžããå²ãåœãŠãããã¡ã¢ãªã®äžéšãä»ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«è¿ãããå ŽåããããŸãã
G1ã¯ãã§ã«ãããè¡ã£ãŠããŸããããããè¡ãããšãã§ããã®ã¯2ã€ã®å Žæã®ãã¡ã®1ã€ã ãã§ãã æåã«ãå®å šãªã³ã¬ã¯ã·ã§ã³äžã«ã次ã«ã䞊åãµã€ã¯ã«ã®1ã€äžã«ã G1ã¯å®å šãªåéãè¡ããªãããã«ããã¡ã¢ãªäœ¿çšéãå°ãªããšãåéãµã€ã¯ã«ã®éã«ããªãã®æéãçããå¯èœæ§ããããŸãã ããã¯ãG1ãåºå®ã¡ã¢ãªãé·æéä¿æã§ãããšããäºå®ã«ã€ãªãããŸãã
JDK 12ã§ã¯ãG1ã¯ã¢ããªã±ãŒã·ã§ã³ãã¢ã€ãã«ç¶æ ã®ãšãã«å®æçã«ç¶ç¶ãŸãã¯äžŠåã«ãŒãã®å®è¡ãè©Šã¿ãJavaããŒãã®å šäœçãªäœ¿çšç¶æ³ãå€æããŸãã æªäœ¿çšã®ã¡ã¢ãªã¯ãããã¿ã€ã ãªãŒã§äºæž¬å¯èœãªæ¹æ³ã§ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«è¿ãããšãã§ããŸãã
æ°ããã³ãã³ãã©ã€ã³ãã©ã°-XX:G1PeriodicGCInterval
ã䜿çšããŠããã§ãã¯éã®ããªç§æ°ãèšå®ã§ããŸãã
ãã®æ©èœã«ãããé·æéã¢ã€ãã«ç¶æ ã«ãªã£ãŠããã¢ããªã±ãŒã·ã§ã³ã§JVMã¡ã¢ãªãããä¿å®çã«äœ¿çšã§ããŸãã
ãã®ä»ã®æ°ããJDKæ©èœ
JEP 230ïŒãã€ã¯ããã³ãããŒã¯ããã
Java Microbenchmarking HarnessïŒJMHïŒã¯ãAlexei ShipilevãOracleã§åããŠãããšãã«éçºãããJavaã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãã¹ããéçºããããã®åºç¯ãªãã©ãããã©ãŒã ãæäŸããŸãã Alexeyã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããéã«çºçããå€ãã®åçŽãªãã¹ïŒãŠã©ãŒã ã¢ãããäŸå€ã®åé¿ãªã©ïŒãåé¿ããã®ã«åœ¹ç«ã€çŽ æŽãããä»äºãããŸããã
ããã§ãJMHãOpenJDKã«å«ããããšãã§ããŸãã JDKèªäœã®äœæ¥ãšã³ãŒãã®å€æŽã«èå³ããã人ã¯èª°ã§ããããã䜿çšããŠãå€æŽååŸã®ããã©ãŒãã³ã¹ãæ¯èŒããããç°ãªããªãªãŒã¹ã®ããã©ãŒãã³ã¹ãæ¯èŒãããã§ããŸãã ãã¹ããå¯èœã«ããããã«ãå€ãã®ãã¹ããå«ãŸããŠããŸãã JMHã®èšèšã§ã¯ãæ°ãããã¹ããå¿ èŠãªå Žæã«ç°¡åã«è¿œå ã§ããŸãã
JEP 340ïŒ2ã€ã§ã¯ãªã1ã€ã®Aarch64ããŒã
OpenJDKã«ã¯Arm64ã¢ãŒããã¯ãã£çšã®2ã€ã®ããŒããããã1ã€ã¯Oracleã«ãã£ãŠæäŸããããã1ã€ã¯Red Hatã§ãã ããã¯äžèŠã§ãããOracleã¯JDKãã€ããªã®Armã®ãµããŒããåæ¢ãããããRed HatããŒãã®ã¿ã䜿çšããããšã決å®ãããŸãããããã¯ãŸã ãµããŒãããã³éçºãããŠããŸãã
JEP 341ïŒããã©ã«ãã®CDSã¢ãŒã«ã€ã
ããŒã¿å ±æïŒCDSïŒã¯ã©ã¹ã¯ã以åã¯Oracle JDKã®åçšæ©èœã§ããã Oracle JDKãšOpenJDKã®æ©èœã®éãããã¹ãŠæé€ããããã«JDK 11ã§æè¿è¡ããã移è¡ã«ãããOpenJDKã«å«ãŸããŸããã
CDSã䜿çšããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ããŒããããã¯ã©ã¹çšã«äœæãããã¢ãŒã«ã€ããå¿
èŠã§ãã 64ããããã©ãããã©ãŒã çšã®JDK 12ã§ã¯ã lib/server
ãã£ã¬ã¯ããªã«classes.jsa
ãã¡ã€ã«ãããlib/server
ã ããã¯ãããã©ã«ãã¯ã©ã¹ãã®CDSã¢ãŒã«ã€ãã§ãã JDKã¢ãžã¥ãŒã«ã®ãã¹ãŠã®ãããªãã¯ã¯ã©ã¹ãæå³ãããšæããŸãã é梱ããŠç¢ºèªããæ¹æ³ãèŠã€ãããŸããã§ããã CDSã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠãããããã³ãã³ãã©ã€ã³ã®-Xshare:auto
ãªãã·ã§ã³ãšåçã§ããããããŠãŒã¶ãŒã¯CDSããã®ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãæ¹åãããŸãã
çµè«
JDK 12ã¯å°æ°ã®æ°æ©èœãšAPIãæäŸããŸããã switch
ã¯éçºè
ã«ãšã£ãŠæãèå³æ·±ããã®ã§ãã G1ãŠãŒã¶ãŒã¯ãããã©ãŒãã³ã¹ã®åäžã«ãã£ãšæè¬ããŸãã
ãã®ãªãªãŒã¹ã®æ°ããããŒãžã§ã³ã§ã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«ãã®ãªãªãŒã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšããå§ãããŸãã 挞é²çãªå€æŽã远跡ããããšã¯ãé·æãµããŒãã®æ¬¡ã®ãªãªãŒã¹ã«ç§»è¡ããããšã«ããå Žåã«é©ããé¿ããã®ã«åœ¹ç«ã¡ãŸãã
Zulu Community Editionçšã®ç¡æã®JDK 12ãã«ããããããã¹ãã«åœ¹ç«ã¡ãŸãã å¿ ãè©ŠããŠãã ããã