---
title: Java 12 & 13 æ°ç¹æ§æ¦è§
category: Java
tag:
- Javaæ°ç¹æ§
---
## Java12
### String å¢å¼º
Java 11 å¢å äºä¸¤ä¸ªçå符串å¤çæ¹æ³ï¼å¦ä»¥ä¸æç¤ºã
`indent()` æ¹æ³å¯ä»¥å®ç°å符串缩è¿ã
```java
String text = "Java";
// ç¼©è¿ 4 æ ¼
text = text.indent(4);
System.out.println(text);
text = text.indent(-10);
System.out.println(text);
```
è¾åºï¼
```
Java
Java
```
`transform()` æ¹æ³å¯ä»¥ç¨æ¥è½¬åæå®å符串ã
```java
String result = "foo".transform(input -> input + " bar");
System.out.println(result); // foo bar
```
### Files å¢å¼ºï¼æä»¶æ¯è¾ï¼
Java 12 æ·»å äºä»¥ä¸æ¹æ³æ¥æ¯è¾ä¸¤ä¸ªæä»¶ï¼
```java
public static long mismatch(Path path, Path path2) throws IOException
```
`mismatch()` æ¹æ³ç¨äºæ¯è¾ä¸¤ä¸ªæä»¶ï¼å¹¶è¿å第ä¸ä¸ªä¸å¹é
å符çä½ç½®ï¼å¦ææä»¶ç¸ååè¿å -1Lã
代ç 示ä¾ï¼ä¸¤ä¸ªæä»¶å
容ç¸åçæ
åµï¼ï¼
```java
Path filePath1 = Files.createTempFile("file1", ".txt");
Path filePath2 = Files.createTempFile("file2", ".txt");
Files.writeString(filePath1, "Java 12 Article");
Files.writeString(filePath2, "Java 12 Article");
long mismatch = Files.mismatch(filePath1, filePath2);
assertEquals(-1, mismatch);
```
代ç 示ä¾ï¼ä¸¤ä¸ªæä»¶å
容ä¸ç¸åçæ
åµï¼ï¼
```java
Path filePath3 = Files.createTempFile("file3", ".txt");
Path filePath4 = Files.createTempFile("file4", ".txt");
Files.writeString(filePath3, "Java 12 Article");
Files.writeString(filePath4, "Java 12 Tutorial");
long mismatch = Files.mismatch(filePath3, filePath4);
assertEquals(8, mismatch);
```
### æ°åæ ¼å¼åå·¥å
·ç±»
`NumberFormat` æ°å¢äºå¯¹å¤æçæ°åè¿è¡æ ¼å¼åçæ¯æ
```java
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
String result = fmt.format(1000);
System.out.println(result);
```
è¾åº:
```
1K
```
### Shenandoah GC
Redhat 主导å¼åç Pauseless GC å®ç°ï¼ä¸»è¦ç®æ æ¯ 99.9% çæåå°äº 10msï¼æåä¸å 大尿 å
³ç
å Java11 弿ºç ZGC ç¸æ¯ï¼éè¦åçº§å° JDK11 æè½ä½¿ç¨ï¼ï¼Shenandoah GC æç¨³å®ç JDK8u çæ¬ï¼å¨ Java8 å æ®ä¸»è¦å¸åºä»½é¢çä»å¤©ææ´å¤§çå¯è½å°æ§ã
### G1 æ¶éå¨ä¼å
Java12 为é»è®¤çå徿¶éå¨ G1 带æ¥äºä¸¤é¡¹æ´æ°:
- **å¯ä¸æ¢çæ··åæ¶ééå** ï¼JEP344 çå®ç°ï¼ä¸ºäºè¾¾å°ç¨æ·æä¾çåé¡¿æ¶é´ç®æ ï¼JEP 344 éè¿æè¦è¢«åæ¶çåºåéï¼æ··åæ¶ééåï¼æå为强å¶åå¯éé¨åï¼ä½¿ G1 åå¾åæ¶å¨è½ä¸æ¢åå¾åæ¶è¿ç¨ã G1 å¯ä»¥ä¸æ¢å¯éé¨åçåæ¶ä»¥è¾¾å°åé¡¿æ¶é´ç®æ
- **åæ¶è¿åæªä½¿ç¨çå·²åé
å
å** ï¼JEP346 çå®ç°ï¼å¢å¼º G1 GCï¼ä»¥ä¾¿å¨ç©ºé²æ¶èªå¨å° Java å å
åè¿åç»æä½ç³»ç»
### é¢è§æ°ç¹æ§
ä½ä¸ºé¢è§ç¹æ§å å
¥ï¼éè¦å¨`javac`ç¼è¯å`java`è¿è¡æ¶å¢å åæ°`--enable-preview` ã
#### å¢å¼º Switch
ä¼ ç»ç `switch` è¯æ³åå¨å®¹ææ¼å `break` çé®é¢ï¼èä¸ä»ä»£ç æ´æ´æ§å±é¢æ¥çï¼å¤ä¸ª break æ¬è´¨ä¹æ¯ä¸ç§éå¤ã
Java12 å¢å¼ºäº `switch` 表达å¼ï¼ä½¿ç¨ç±»ä¼¼ lambda è¯æ³æ¡ä»¶å¹é
æååçæ§è¡åï¼ä¸éè¦å¤å break ã
```java
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
```
#### instanceof 模å¼å¹é
`instanceof` 主è¦å¨ç±»åå¼ºè½¬åæ¢æµå¯¹è±¡çå
·ä½ç±»åã
ä¹åççæ¬ä¸ï¼æä»¬éè¦æ¾ç¤ºå°å¯¹å¯¹è±¡è¿è¡ç±»å转æ¢ã
```java
Object obj = "ææ¯å符串";
if(obj instanceof String){
String str = (String) obj;
System.out.println(str);
}
```
æ°çç `instanceof` å¯ä»¥å¨å¤ææ¯å¦å±äºå
·ä½çç±»ååæ¶å®æè½¬æ¢ã
```java
Object obj = "ææ¯å符串";
if(obj instanceof String str){
System.out.println(str);
}
```
## Java13
### å¢å¼º ZGC(éæ¾æªä½¿ç¨å
å)
å¨ Java 11 䏿¯å®éªæ§çå¼å
¥ç ZGC å¨å®é
ç使ç¨ä¸å卿ªè½ä¸»å¨å°æªä½¿ç¨çå
åéæ¾ç»æä½ç³»ç»çé®é¢ã
ZGC å ç±ä¸ç»ç§°ä¸º ZPages çå åºåç»æãå¨ GC 卿䏿¸
空 ZPages åºåæ¶ï¼å®ä»¬å°è¢«éæ¾å¹¶è¿åå°é¡µé¢ç¼å **ZPageCache** ä¸ï¼æ¤ç¼åä¸ç ZPages ææè¿æå°ä½¿ç¨ï¼LRUï¼ç顺åºï¼å¹¶æç
§å¤§å°è¿è¡ç»ç»ã
å¨ Java 13 ä¸ï¼ZGC å°åæä½ç³»ç»è¿å被æ è¯ä¸ºé¿æ¶é´æªä½¿ç¨ç页é¢ï¼è¿æ ·å®ä»¬å°å¯ä»¥è¢«å
¶ä»è¿ç¨éç¨ã
### SocketAPI éæ
Java Socket API ç»äºè¿æ¥äºéå¤§æ´æ°ï¼
Java 13 å° Socket API çåºå±è¿è¡äºéåï¼ `NioSocketImpl` æ¯å¯¹ `PlainSocketImpl` çç´æ¥æ¿ä»£ï¼å®ä½¿ç¨ `java.util.concurrent` å
ä¸çéè䏿¯åæ¥æ¹æ³ã妿è¦ä½¿ç¨æ§å®ç°ï¼è¯·ä½¿ç¨ `-Djdk.net.usePlainSocketImpl=true`ã
å¹¶ä¸ï¼å¨ Java 13 䏿¯é»è®¤ä½¿ç¨æ°ç Socket å®ç°ã
```java
public final class NioSocketImpl extends SocketImpl implements PlatformSocketImpl {
}
```
### FileSystems
`FileSystems` ç±»ä¸æ·»å äºä»¥ä¸ä¸ç§æ°æ¹æ³ï¼ä»¥ä¾¿æ´å®¹æå°ä½¿ç¨å°æä»¶å
容è§ä¸ºæä»¶ç³»ç»çæä»¶ç³»ç»æä¾ç¨åºï¼
- `newFileSystem(Path)`
- `newFileSystem(Path, Map