---
title: Java 10 æ°ç¹æ§æ¦è§
description: æ¦è§ JDK 10 çä¸»è¦æ´æ°ï¼éç¹ä»ç» var ç±»åæ¨æä¸å
¶ä»å¹³å°æ¹è¿ã
category: Java
tag:
- Javaæ°ç¹æ§
head:
- - meta
- name: keywords
content: Java 10,JDK10,var å±é¨åéç±»åæ¨æ,åå¾åæ¶æ¹è¿,æ§è½
---
**Java 10** åå¸äº 2018 å¹´ 3 æ 20 æ¥ï¼è¿æ¯ä¸ä¸ªé LTSï¼é¿ææ¯æï¼çæ¬ï¼Oracle ä»
æä¾å
个æçæ¯æã
ä¸å¾æ¯ä» JDK 8 å° JDK 25 æ¯ä¸ªçæ¬çæ´æ°å¸¦æ¥çæ°ç¹æ§æ°éåæ´æ°æ¶é´ï¼

è¿ç¯æç« 伿éå
¶ä¸è¾ä¸ºéè¦çä¸äºæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ï¼
- [JEP 286: Local-Variable Type Inferenceï¼å±é¨åéç±»åæ¨æï¼](https://openjdk.org/jeps/286)
- [JEP 304: Garbage-Collector Interfaceï¼åå¾åæ¶å¨æ¥å£ï¼](https://openjdk.org/jeps/304)
- [JEP 307: Parallel Full GC for G1ï¼G1 å¹¶è¡ Full GCï¼](https://openjdk.org/jeps/307)
- [JEP 310: Application Class-Data Sharingï¼åºç¨ç¨åºç±»æ°æ®å
±äº«ï¼](https://openjdk.org/jeps/310)
- [JEP 317: Experimental Java-Based JIT Compilerï¼å®éªæ§çåºäº Java ç JIT ç¼è¯å¨ï¼](https://openjdk.org/jeps/317)
## JEP 286: Local-Variable Type Inference
ç±äºå¤ªå¤ Java å¼åè
叿 Java ä¸å¼å
¥å±é¨åéç±»åæ¨æï¼äºæ¯ Java 10 çæ¶å宿¥äºï¼ä¹ç®æ¯ä¼ææå½äºï¼
Java 10 æä¾äº `var` å
³é®å声æå±é¨åéã
```java
var id = 0;
var codefx = new URL("https://mp.weixin.qq.com/");
var list = new ArrayList<>();
var list = List.of(1, 2, 3);
var map = new HashMap();
var p = Paths.of("src/test/java/Java9FeaturesTest.java");
var numbers = List.of("a", "b", "c");
for (var n : numbers)
System.out.print(n+ " ");
```
`var` åªè½ç¨äºæåå§åå¨çå±é¨åé声æï¼ä¹å¯ä»¥ç¨äºåºæ¬æå¢å¼º `for` 循ç¯ä¸çå±é¨åéï¼ä»¥å `try`-with-resources çèµæºåéãå®ä¸è½ç¨äºåæ®µãæ¹æ³åæ°æè¿åç±»åã
```java
var count = null; //âç¼è¯ä¸éè¿ï¼ä¸è½å£°æä¸º null
var r = () -> Math.random();//âç¼è¯ä¸éè¿ï¼ä¸è½å£°æä¸º Lambda表达å¼
var array = {1, 2, 3};//âç¼è¯ä¸éè¿ï¼ä¸è½å£°ææ°ç»
```
`var` å¹¶ä¸ä¼æ¹å Java æ¯ä¸é¨éæç±»åè¯è¨çäºå®ï¼ç¼è¯å¨è´è´£æ¨æåºç±»åã
å¦å¤ï¼Scala å Kotlin ä¸å·²ç»æäº `val` å
³é®å ( `final var` ç»åå
³é®å)ã
## JEP 304: Garbage-Collector Interface
卿©æç JDK ç»æä¸ï¼ç»æå徿¶éå¨ (GC) å®ç°çç»ä»¶åæ£å¨ä»£ç åºçå个é¨åã Java 10 éè¿å¼å
¥ä¸å¥çº¯åçå徿¶é卿¥å£æ¥å°ä¸åå徿¶éå¨çæºä»£ç åéå¼ã
## JEP 307: Parallel Full GC for G1
ä» Java 9 å¼å§ G1 å°±æäºé»è®¤çåå¾åæ¶å¨ï¼G1 æ¯ä»¥ä¸ç§ä½å»¶æ¶çåå¾åæ¶å¨æ¥è®¾è®¡çï¼æ¨å¨é¿å
è¿è¡ Full GCï¼ä½æ¯ Java 9 ç G1 ç Full GC ä¾ç¶æ¯ä½¿ç¨å线ç¨å»å®ææ è®°æ¸
é¤ç®æ³ï¼è¿å¯è½ä¼å¯¼è´åå¾åæ¶å¨å¨æ æ³åæ¶å
åçæ¶å触å Full GCã
为äºåå° Full GC é æçåºç¨åé¡¿ï¼ä» Java 10 å¼å§ï¼G1 ç Full GC æ¹ä¸ºä½¿ç¨å¤ä¸ªå¹¶è¡å·¥ä½çº¿ç¨æ§è¡æ è®°ãæ¸
é¤åå缩ãè¿ä¸ªåå缩ççæ¯ Full GC çåé¡¿æ¶é´ï¼å¹¶ä¸ä¼ç´æ¥åå° Full GC çè§¦åæ¬¡æ°ã
## JEP 310: **åºç¨ç¨åºç±»æ°æ®å
±äº«ï¼æ©å± CDS åè½ï¼**
Java 5 å·²ç»å¼å
¥ç±»æ°æ®å
±äº«æºå¶ï¼Class Data Sharingï¼ç®ç§° CDSï¼ï¼å
许å°ä¸ç»ç³»ç»ç±»é¢å¤ç为å
±äº«å½æ¡£æä»¶ï¼ä»¥ä¾¿å¨è¿è¡æ¶è¿è¡å
åæ å°ï¼ä»èåå° Java ç¨åºçå¯å¨æ¶é´åå¤ä¸ª JVM çå
åå ç¨ãå°åºç¨ç±»å å
¥å
±äº«å½æ¡£ç AppCDS æ¤ååªå¨ Oracle JDK ä¸ä½ä¸ºåä¸ç¹æ§æä¾ã
Java 10 å¨ç°æ CDS åè½åºç¡ä¸è¿ä¸æ¥æ©å±å¹¶å¼æ¾ AppCDSï¼å
许åºç¨ç±»æ¾å
¥å
±äº«å½æ¡£ãå
¸åæµç¨æ¯å
çæåºç¨ç±»å表ï¼åæ ¹æ®ç±»å表å建å
±äº«å½æ¡£ï¼åç»å¯å¨æ¶éè¿å
åæ å°å è½½è¯¥å½æ¡£ï¼ç±»åè¡¨ææ¬æ¬èº«å¹¶ä¸æ¯ JVM å¨åç»å¯å¨æ¶ç´æ¥å è½½çç¼åã
## JEP 317: **å®éªæ§çåºäº Java ç JIT ç¼è¯å¨**
Graal æ¯ä¸ä¸ªåºäº Java è¯è¨ç¼åç JIT ç¼è¯å¨ï¼æ¯ JDK 9 ä¸å¼å
¥çå®éªæ§ Ahead-of-Time (AOT) ç¼è¯å¨çåºç¡ã
Oracle ç HotSpot VM 便éå¸¦ä¸¤ä¸ªç¨ C++ å®ç°ç JIT compilerï¼C1 å C2ãå¨ Java 10 (Linux/x64, macOS/x64) ä¸ï¼é»è®¤æ
åµä¸ HotSpot ä»ä½¿ç¨ C2ï¼ä½éè¿å java å½ä»¤æ·»å `-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler` åæ°ä¾¿å¯å° C2 æ¿æ¢æ Graalã
## API å¢å¼º
并䏿¯ææç API æ¹å¨é½ä¼éè¿ JEPï¼Java Enhancement Proposalï¼æ¥åå¸ã
å¨ JDK çå¼åæµç¨ä¸ï¼**JEP** é常ç¨äºéå¤§çæ¹åï¼ä¾å¦å¼å
¥æ°çè¯è¨ç¹æ§ï¼å¦ `var`ï¼ãæ°ç JVM æºå¶ï¼å¦ ZGCï¼æè
å¤§è§æ¨¡çåºéæãå `List.copyOf()` è¿ç§å¨ç°æç±»ä¸å¢å å ä¸ªéææ¹æ³çæä½ï¼é常被è§ä¸ºå¸¸è§çåºç»´æ¤ãå®ä»¬ç± JDK å¼åè
ç´æ¥éè¿ **JBS (JDK Bug System)** çå·¥åï¼Ticketï¼è¿è¡æäº¤åè¯å®¡ï¼ç¶åéçæ¬ç´æ¥åå¸ã
### éåå¢å¼º
`List`ï¼`Set`ï¼`Map` æä¾äºéææ¹æ³ `copyOf()` è¿åå
¥åéåçä¸ä¸ªä¸å¯åæ·è´ã
```java
static List copyOf(Collection extends E> coll) {
return ImmutableCollections.listCopy(coll);
}
```
ä½¿ç¨ `copyOf()` å建çéå为ä¸å¯åéåï¼ä¸è½è¿è¡æ·»å ãå é¤ãæ¿æ¢ã æåºçæä½ï¼ä¸ç¶ä¼æ¥ `java.lang.UnsupportedOperationException` å¼å¸¸ã IDEA ä¹ä¼æç¸åºçæç¤ºã

å¹¶ä¸ï¼`java.util.stream.Collectors` 䏿°å¢äºéææ¹æ³ï¼ç¨äºå°æµä¸çå
ç´ æ¶é为ä¸å¯åçéåã
```java
var list = new ArrayList<>();
list.stream().collect(Collectors.toUnmodifiableList());
list.stream().collect(Collectors.toUnmodifiableSet());
```
### Optional å¢å¼º
`Optional` æ°å¢äºä¸ä¸ªæ åç `orElseThrow()` æ¹æ³ï¼ä½ä¸ºå¸¦åæ°ç `orElseThrow(Supplier extends X> exceptionSupplier)` çç®åçæ¬ï¼å¨æ²¡æå¼æ¶é»è®¤æåºä¸ä¸ª NoSuchElementException å¼å¸¸ã
```java
Optional optional = Optional.empty();
String result = optional.orElseThrow();
```
## å
¶ä»
- **线ç¨-å±é¨ç®¡æ§**ï¼Java 10 ä¸çº¿ç¨ç®¡æ§å¼å
¥ JVM å®å
¨ç¹çæ¦å¿µï¼å°å
许å¨ä¸è¿è¡å
¨å± JVM å®å
¨ç¹çæ
åµä¸å®ç°çº¿ç¨åè°ï¼ç±çº¿ç¨æ¬èº«æè
JVM çº¿ç¨æ¥æ§è¡ï¼åæ¶ä¿æçº¿ç¨å¤äºé»å¡ç¶æï¼è¿ç§æ¹å¼ä½¿å¾åæ¢å个线ç¨åæå¯è½ï¼è䏿¯åªè½å¯ç¨æåæ¢ææçº¿ç¨
- **å¤ç¨åå¨è£
ç½®ä¸çå åé
**ï¼Java 10 ä¸å°ä½¿å¾ JVM è½å¤ä½¿ç¨éç¨äºä¸åç±»åçå卿ºå¶çå ï¼å¨å¯éå
å设å¤ä¸è¿è¡å å
ååé
- â¦â¦
## åè
- Java 10 Features and Enhancements :
- Guide to Java10 :
- 4 Class Data Sharing :