---
title: Java 10 æ°ç¹æ§æ¦è§
category: Java
tag:
- Javaæ°ç¹æ§
---
**Java 10** åå¸äº 2018 å¹´ 3 æ 20 æ¥ï¼æç¥åçç¹æ§åºè¯¥æ¯ `var` å
³é®åï¼å±é¨åéç±»åæ¨æï¼çå¼å
¥äºï¼å
¶ä»è¿æå徿¶é卿¹åãGC æ¹è¿ãæ§è½æåã线ç¨ç®¡æ§ç䏿¹æ°ç¹æ§ã
**æ¦è§ï¼ç²¾éäºä¸é¨åï¼** ï¼
- [JEP 286ï¼å±é¨åéç±»åæ¨æ](https://openjdk.java.net/jeps/286)
- [JEP 304ï¼åå¾åæ¶å¨æ¥å£](https://openjdk.java.net/jeps/304)
- [JEP 307ï¼G1 å¹¶è¡ Full GC](https://openjdk.java.net/jeps/307)
- [JEP 310ï¼åºç¨ç¨åºç±»æ°æ®å
±äº«(æ©å± CDS åè½)](https://openjdk.java.net/jeps/310)
- [JEP 317ï¼å®éªæ§çåºäº Java ç JIT ç¼è¯å¨](https://openjdk.java.net/jeps/317)
## å±é¨åéç±»åæ¨æ(var)
ç±äºå¤ªå¤ 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 : list)
System.out.print(n+ " ");
```
var å
³é®ååªè½ç¨äºå¸¦ææé å¨çå±é¨åéå for 循ç¯ä¸ã
```java
var count=null; //âç¼è¯ä¸éè¿ï¼ä¸è½å£°æä¸º null
var r = () -> Math.random();//âç¼è¯ä¸éè¿,ä¸è½å£°æä¸º Lambda表达å¼
var array = {1,2,3};//âç¼è¯ä¸éè¿,ä¸è½å£°ææ°ç»
```
var å¹¶ä¸ä¼æ¹å Java æ¯ä¸é¨éæç±»åè¯è¨çäºå®ï¼ç¼è¯å¨è´è´£æ¨æåºç±»åã
å¦å¤ï¼Scala å Kotlin ä¸å·²ç»æäº `val` å
³é®å ( `final var` ç»åå
³é®å)ã
ç¸å
³é
读ï¼[ãJava 10 æ°ç¹æ§ä¹å±é¨åéç±»åæ¨æã](https://zhuanlan.zhihu.com/p/34911982)ã
## åå¾åæ¶å¨æ¥å£
卿©æç JDK ç»æä¸ï¼ç»æå徿¶éå¨ (GC) å®ç°çç»ä»¶åæ£å¨ä»£ç åºçå个é¨åã Java 10 éè¿å¼å
¥ä¸å¥çº¯åçå徿¶é卿¥å£æ¥å°ä¸åå徿¶éå¨çæºä»£ç åéå¼ã
## G1 å¹¶è¡ Full GC
ä» Java9 å¼å§ G1 å°±äºé»è®¤çåå¾åæ¶å¨ï¼G1 æ¯ä»¥ä¸ç§ä½å»¶æ¶çåå¾åæ¶å¨æ¥è®¾è®¡çï¼æ¨å¨é¿å
è¿è¡ Full GC,使¯ Java9 ç G1 ç FullGC ä¾ç¶æ¯ä½¿ç¨å线ç¨å»å®ææ è®°æ¸
é¤ç®æ³,è¿å¯è½ä¼å¯¼è´åå¾åæ¶æå¨æ æ³åæ¶å
åçæ¶å触å Full GCã
ä¸ºäºæå¤§é度å°åå° Full GC é æçåºç¨åé¡¿çå½±åï¼ä» Java10 å¼å§ï¼G1 ç FullGC æ¹ä¸ºå¹¶è¡çæ è®°æ¸
é¤ç®æ³ï¼åæ¶ä¼ä½¿ç¨ä¸å¹´è½»ä»£åæ¶åæ··ååæ¶ç¸åçå¹¶è¡å·¥ä½çº¿ç¨æ°éï¼ä»èåå°äº Full GC çåçï¼ä»¥å¸¦æ¥æ´å¥½çæ§è½æåãæ´å¤§çååéã
## éåå¢å¼º
`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()`æ¹æ³æ¥å¨æ²¡æå¼æ¶æåºæå®çå¼å¸¸ã
```java
Optional.ofNullable(cache.getIfPresent(key))
.orElseThrow(() -> new PrestoException(NOT_FOUND, "Missing entry found for key: " + key));
```
## åºç¨ç¨åºç±»æ°æ®å
±äº«(æ©å± CDS åè½)
å¨ Java 5 ä¸å°±å·²ç»å¼å
¥äºç±»æ°æ®å
±äº«æºå¶ (Class Data Sharingï¼ç®ç§° CDS)ï¼å
许å°ä¸ç»ç±»é¢å¤ç为å
±äº«å½æ¡£æä»¶ï¼ä»¥ä¾¿å¨è¿è¡æ¶è½å¤è¿è¡å
åæ å°ä»¥åå° Java ç¨åºçå¯å¨æ¶é´ï¼å½å¤ä¸ª Java èææºï¼JVMï¼å
±äº«ç¸åç彿¡£æä»¶æ¶ï¼è¿å¯ä»¥åå°å¨æå
åçå ç¨éï¼åæ¶åå°å¤ä¸ªèææºå¨åä¸ä¸ªç©çæèæçæºå¨ä¸è¿è¡æ¶çèµæºå ç¨ãCDS å¨å½æ¶è¿æ¯ Oracle JDK çåä¸ç¹æ§ã
Java 10 å¨ç°æç CDS åè½åºç¡ä¸å次æå±ï¼ä»¥å
许åºç¨ç±»æ¾ç½®å¨å
±äº«åæ¡£ä¸ãCDS ç¹æ§å¨åæ¥ç bootstrap ç±»åºç¡ä¹ä¸ï¼æ©å±å å
¥äºåºç¨ç±»ç CDS 为 (Application Class-Data Sharingï¼AppCDS) æ¯æï¼å¤§å¤§å å¤§äº CDS çéç¨èå´ãå
¶åç为ï¼å¨å¯å¨æ¶è®°å½å 载类çè¿ç¨ï¼åå
¥å°ææ¬æä»¶ä¸ï¼å次å¯å¨æ¶ç´æ¥è¯»åæ¤å¯å¨ææ¬å¹¶å è½½ã设æ³å¦æåºç¨ç¯å¢æ²¡æå¤§çååï¼å¯å¨é度就ä¼å¾å°æåã
## å®éªæ§çåºäº 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ã
ç¸å
³é
读ï¼[æ·±å
¥æµ
åº Java 10 çå®éªæ§ JIT ç¼è¯å¨ Graal - éé¨è¿ª](https://www.infoq.cn/article/java-10-jit-compiler-graal)
## å
¶ä»
- **线ç¨-å±é¨ç®¡æ§**ï¼Java 10 ä¸çº¿ç¨ç®¡æ§å¼å
¥ JVM å®å
¨ç¹çæ¦å¿µï¼å°å
许å¨ä¸è¿è¡å
¨å± JVM å®å
¨ç¹çæ
åµä¸å®ç°çº¿ç¨åè°ï¼ç±çº¿ç¨æ¬èº«æè
JVM çº¿ç¨æ¥æ§è¡ï¼åæ¶ä¿æçº¿ç¨å¤äºé»å¡ç¶æï¼è¿ç§æ¹å¼ä½¿å¾åæ¢å个线ç¨åæå¯è½ï¼è䏿¯åªè½å¯ç¨æåæ¢ææçº¿ç¨
- **å¤ç¨åå¨è£
ç½®ä¸çå åé
**ï¼Java 10 ä¸å°ä½¿å¾ JVM è½å¤ä½¿ç¨éç¨äºä¸åç±»åçå卿ºå¶çå ï¼å¨å¯éå
å设å¤ä¸è¿è¡å å
ååé
- ......
## åè
- Java 10 Features and Enhancements : https://howtodoinjava.com/java10/java10-features/
- Guide to Java10 :
- 4 Class Data Sharing : https://docs.oracle.com/javase/10/vm/class-data-sharing.htm#JSJVM-GUID-7EAA3411-8CF0-4D19-BD05-DF5E1780AA91