--- title: Java 15 æ°ç¹æ§æ¦è§ category: Java tag: - Javaæ°ç¹æ§ --- ## CharSequence `CharSequence` æ¥å£æ·»å äºä¸ä¸ªé»è®¤æ¹æ³ `isEmpty()` æ¥å¤æå符åºå为空ï¼å¦ææ¯åè¿å trueã ```java public interface CharSequence { default boolean isEmpty() { return this.length() == 0; } } ``` ## TreeMap `TreeMap` æ°å¼å ¥äºä¸é¢è¿äºæ¹æ³ï¼ - `putIfAbsent()` - `computeIfAbsent()` - `computeIfPresent()` - `compute()` - `merge()` ## ZGC(转æ£) Java11 çæ¶å ï¼ZGC è¿å¨è¯éªé¶æ®µã 彿¶ï¼ZGC çåºç°è®©ä¼å¤ Java å¼åè çå°äºåå¾åæ¶å¨çå¦å¤ä¸ç§å¯è½ï¼å æ¤å¤åå ³æ³¨ã ç»è¿å¤ä¸ªçæ¬çè¿ä»£ï¼ä¸æçå®ååä¿®å¤é®é¢ï¼ZGC å¨ Java 15 å·²ç»å¯ä»¥æ£å¼ä½¿ç¨äºï¼ ä¸è¿ï¼é»è®¤çåå¾åæ¶å¨ä¾ç¶æ¯ G1ãä½ å¯ä»¥éè¿ä¸é¢çåæ°å¯å¨ ZGCï¼ ```bash $ java -XX:+UseZGC className ``` ## EdDSA(æ°åç¾åç®æ³) æ°å å ¥äºä¸ä¸ªå®å ¨æ§åæ§è½é½æ´å¼ºçåºäº Edwards-Curve Digital Signature Algorithm ï¼EdDSAï¼å®ç°çæ°åç¾åç®æ³ã è½ç¶å ¶æ§è½ä¼äºç°æç ECDSA å®ç°ï¼ä¸è¿ï¼å®å¹¶ä¸ä¼å®å ¨å代 JDK ä¸ç°æçæ¤åæ²çº¿æ°åç¾åç®æ³( ECDSA)ã ```java KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519"); KeyPair kp = kpg.generateKeyPair(); byte[] msg = "test_string".getBytes(StandardCharsets.UTF_8); Signature sig = Signature.getInstance("Ed25519"); sig.initSign(kp.getPrivate()); sig.update(msg); byte[] s = sig.sign(); String encodedString = Base64.getEncoder().encodeToString(s); System.out.println(encodedString); ``` è¾åºï¼ ``` 0Hc0lxxASZNvS52WsvnncJOH/mlFhnA8Tc6D/k5DtAX5BSsNVjtPF4R4+yMWXVjrvB2mxVXmChIbki6goFBgAg== ``` ## ææ¬å(转æ£) å¨ Java 15 ï¼ææ¬åæ¯æ£å¼çåè½ç¹æ§äºã ## éèç±»(Hidden Classes) éèç±»æ¯ä¸ºæ¡æ¶ï¼frameworksï¼æè®¾è®¡çï¼éèç±»ä¸è½ç´æ¥è¢«å ¶ä»ç±»çåèç 使ç¨ï¼åªè½å¨è¿è¡æ¶çæç±»å¹¶éè¿åå°é´æ¥ä½¿ç¨å®ä»¬ã ## é¢è§æ°ç¹æ§ ### å¯å°ç±» **å¯å°ç±»ï¼Sealed Classesï¼** æ¯ Java 15 ä¸çä¸ä¸ªé¢è§æ°ç¹æ§ã 没æå¯å°ç±»ä¹åï¼å¨ Java ä¸å¦ææ³è®©ä¸ä¸ªç±»ä¸è½è¢«ç»§æ¿åä¿®æ¹ï¼æä»¬å¯ä»¥ä½¿ç¨`final` å ³é®å对类è¿è¡ä¿®é¥°ãä¸è¿ï¼è¿ç§æ¹å¼ä¸å¤ªçµæ´»ï¼ç´æ¥æä¸ä¸ªç±»çç»§æ¿åä¿®æ¹æ¸ éç»å µæ»äºã å¯å°ç±»å¯ä»¥å¯¹ç»§æ¿æè å®ç°å®ä»¬çç±»è¿è¡éå¶ï¼è¿æ ·è¿ä¸ªç±»å°±åªè½è¢«æå®ç类继æ¿ã ```java // æ½è±¡ç±» Person åªå 许 Employee å Manager ç»§æ¿ã public abstract sealed class Person permits Employee, Manager { //... } ``` å¦å¤ï¼ä»»ä½æ©å±å¯å°ç±»çç±»æ¬èº«é½å¿ 须声æä¸º `sealed`ã`non-sealed` æ `final`ã ```java public final class Employee extends Person { } public non-sealed class Manager extends Person { } ```  妿å 许æ©å±çåç±»åå°éç±»å¨åä¸ä¸ªæºä»£ç æä»¶éï¼å°éç±»å¯ä»¥ä¸ä½¿ç¨ permits è¯å¥ï¼Java ç¼è¯å¨å°æ£ç´¢æºæä»¶ï¼å¨ç¼è¯æä¸ºå°é类添å ä¸è®¸å¯çåç±»ã ### instanceof 模å¼å¹é Java 15 并没æå¯¹æ¤ç¹æ§è¿è¡è°æ´ï¼ç»§ç»é¢è§ç¹æ§ï¼ä¸»è¦ç¨äºæ¥åæ´å¤ç使ç¨åé¦ã 卿ªæ¥ç Java çæ¬ä¸ï¼Java çç®æ æ¯ç»§ç»å®å `instanceof` 模å¼å¹é æ°ç¹æ§ã ## Java15 å ¶ä»æ°ç¹æ§ - **Nashorn JavaScript 弿彻åºç§»é¤** ï¼Nashorn ä» Java8 å¼å§å¼å ¥ç JavaScript 弿ï¼Java9 对 Nashorn åäºäºå¢å¼ºï¼å®ç°äºä¸äº ES6 çæ°ç¹æ§ãå¨ Java 11 ä¸å°±å·²ç»è¢«å¼ç¨ï¼å°äº Java 15 就彻åºè¢«å é¤äºã - **DatagramSocket API éæ** - **ç¦ç¨ååºå¼ååéï¼Biased Lockingï¼** ï¼ ååéçå¼å ¥å¢å äº JVM ç夿æ§å¤§äºå ¶å¸¦æ¥çæ§è½æåãä¸è¿ï¼ä½ ä»ç¶å¯ä»¥ä½¿ç¨ `-XX:+UseBiasedLocking` å¯ç¨ååéå®ï¼ä½å®ä¼æç¤º è¿æ¯ä¸ä¸ªå·²å¼ç¨ç APIã - ...... ## æ»ç» ### å ³äºé¢è§ç¹æ§ å è´´ä¸æ®µ oracle å®ç½åæï¼`This is a preview feature, which is a feature whose design, specification, and implementation are complete, but is not permanent, which means that the feature may exist in a different form or not at all in future JDK releases. To compile and run code that contains preview features, you must specify additional command-line options.` è¿æ¯ä¸ä¸ªé¢è§åè½ï¼è¯¥åè½ç设计ï¼è§æ ¼åå®ç°æ¯å®æ´çï¼ä½ä¸æ¯æ°¸ä¹ æ§çï¼è¿æå³ç该åè½å¯è½ä»¥å ¶ä»å½¢å¼å卿å¨å°æ¥ç JDK çæ¬ä¸æ ¹æ¬ä¸åå¨ã è¦ç¼è¯åè¿è¡å å«é¢è§åè½ç代ç ï¼å¿ é¡»æå®å ¶ä»å½ä»¤è¡é项ã 就以`switch`çå¢å¼ºä¸ºä¾åï¼ä» Java12 䏿¨åºï¼å° Java13 ä¸å°ç»§ç»å¢å¼ºï¼ç´å° Java14 ææ£å¼è½¬æ£è¿å ¥ JDK å¯ä»¥æ¾å¿ä½¿ç¨ï¼ä¸ç¨èèåç» JDK çæ¬å¯¹å ¶çæ¹å¨æä¿®æ¹ ä¸æ¹é¢å¯ä»¥çåº JDK ä½ä¸ºæ åå¹³å°å¨å¢å æ°ç¹æ§ç严谨æåº¦ï¼å¦ä¸æ¹é¢ä¸ªäººè®¤ä¸ºæ¯å¯¹äºé¢è§ç¹æ§åºè¯¥éå审æ 使ç¨çæåº¦ãç¹æ§ç设计åå®ç°å®¹æï¼ä½æ¯å ¶å®é ä»·å¼ä¾ç¶éè¦å¨ä½¿ç¨ä¸å»éªè¯ ### JVM èææºä¼å æ¯æ¬¡ Java çæ¬çåå¸é½ä¼´éç对 JVM èææºçä¼åï¼å æ¬å¯¹ç°æåå¾åæ¶ç®æ³çæ¹è¿ï¼å¼å ¥æ°çåå¾åæ¶ç®æ³ï¼ç§»é¤èæ§çä¸åéç¨äºä»å¤©çåå¾åæ¶ç®æ³ç æ´ä½ä¼åçæ¹åæ¯**髿ï¼ä½æ¶å»¶çåå¾åæ¶è¡¨ç°** å¯¹äºæ¥å¸¸çåºç¨å¼åè å¯è½æ¯è¾å ³æ³¨æ°çè¯æ³ç¹æ§ï¼ä½æ¯ä»ä¸ä¸ªå ¬å¸è§åº¦æ¥è¯´ï¼å¨èèæ¯å¦å级 Java 平尿¶æ´å èèçæ¯**JVM è¿è¡æ¶çæå**