---
title: Java 19 æ°ç¹æ§æ¦è§
description: ä»ç» JDK 19 çé¢è§ç¹æ§ä¸å¹¶åç¸å
³æ´æ°ï¼ä¸ºåç»èæçº¿ç¨éºå«ã
category: Java
tag:
- Javaæ°ç¹æ§
head:
- - meta
- name: keywords
content: Java 19,JDK19,èæçº¿ç¨é¢è§,ç»æåå¹¶å,å¤é¨å½æ° API,JEP
---
JDK 19 äº 2022 å¹´ 9 æ 20 æ¥æ£å¼åå¸ï¼éé¿ææ¯æçæ¬ã
JDK 19 å
±æ 7 个æ°ç¹æ§ï¼è¿ç¯æç« 伿éå
¶ä¸è¾ä¸ºéè¦çä¸äºæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ï¼
- [JEP 424: Foreign Function & Memory APIï¼å¤é¨å½æ°åå
å APIï¼](https://openjdk.org/jeps/424)ï¼é¢è§ï¼
- [JEP 425: Virtual Threadsï¼èæçº¿ç¨ï¼](https://openjdk.org/jeps/425)ï¼é¢è§ï¼
- [JEP 426: Vector APIï¼åé APIï¼](https://openjdk.java.net/jeps/426)ï¼ç¬¬å次åµåï¼
- [JEP 428: Structured Concurrencyï¼ç»æåå¹¶åï¼](https://openjdk.org/jeps/428)ï¼åµåï¼
ä¸å¾æ¯ä» JDK 8 å° JDK 25 æ¯ä¸ªçæ¬çæ´æ°å¸¦æ¥çæ°ç¹æ§æ°éåæ´æ°æ¶é´ï¼

## JEP 424: å¤é¨å½æ°åå
å APIï¼é¢è§ï¼
Java ç¨åºå¯ä»¥éè¿è¯¥ API ä¸ Java è¿è¡æ¶ä¹å¤ç代ç åæ°æ®è¿è¡äºæä½ãéè¿é«æå°è°ç¨å¤é¨å½æ°ï¼å³ JVM ä¹å¤ç代ç ï¼åå®å
¨å°è®¿é®å¤é¨å
åï¼å³ä¸å JVM 管ççå
åï¼ï¼è¯¥ API 使 Java ç¨åºè½å¤è°ç¨æ¬æºåºå¹¶å¤çæ¬æºæ°æ®ï¼èä¸ä¼å JNI 飿 ·å±é©åèå¼±ã
å¤é¨å½æ°åå
å API å¨ Java 17 ä¸è¿è¡äºç¬¬ä¸è½®åµåï¼ç± [JEP 412](https://openjdk.java.net/jeps/412) æåºã第äºè½®åµåç±[JEP 419](https://openjdk.org/jeps/419) æåºå¹¶éæå°äº Java 18 ä¸ï¼é¢è§ç± [JEP 424](https://openjdk.org/jeps/424) æåºå¹¶éæå°äº Java 19 ä¸ã
卿²¡æå¤é¨å½æ°åå
å API ä¹åï¼
- Java éè¿ [`sun.misc.Unsafe`](https://hg.openjdk.java.net/jdk/jdk/file/tip/src/jdk.unsupported/share/classes/sun/misc/Unsafe.java) æä¾ä¸äºæ§è¡ä½çº§å«ãä¸å®å
¨æä½çæ¹æ³ï¼å¦ç´æ¥è®¿é®ç³»ç»å
åèµæºãèªä¸»ç®¡çå
åèµæºçï¼ï¼`Unsafe` 类让 Java è¯è¨æ¥æäºç±»ä¼¼ C è¯è¨æé䏿 ·æä½å
å空é´çè½åçåæ¶ï¼ä¹å¢å äº Java è¯è¨çä¸å®å
¨æ§ï¼ä¸æ£ç¡®ä½¿ç¨ `Unsafe` ç±»ä¼ä½¿å¾ç¨åºåºéçæ¦çå大ã
- Java 1.1 就已éè¿ Java åçæ¥å£ï¼JNIï¼æ¯æäºåçæ¹æ³è°ç¨ï¼ä½å¹¶ä¸å¥½ç¨ãJNI å®ç°èµ·æ¥è¿äºå¤æï¼æ¥éª¤ç¹çï¼å
·ä½çæ¥éª¤å¯ä»¥åèè¿ç¯æç« ï¼[Guide to JNI (Java Native Interface)](https://www.baeldung.com/jni)ï¼ï¼ä¸å JVM çè¯è¨å®å
¨æºå¶æ§å¶ï¼å½±å Java è¯è¨ç跨平å°ç¹æ§ãå¹¶ä¸ï¼JNI çæ§è½ä¹ä¸è¡ï¼å 为 JNI æ¹æ³è°ç¨ä¸è½ä»è®¸å¤å¸¸è§ç JIT ä¼åï¼å¦å
èï¼ä¸åçãè½ç¶ [JNA](https://github.com/java-native-access/jna)ã[JNR](https://github.com/jnr/jnr-ffi) å [JavaCPP](https://github.com/bytedeco/javacpp) çæ¡æ¶å¯¹ JNI è¿è¡äºæ¹è¿ï¼ä½ææè¿æ¯ä¸å¤ªçæ³ã
å¼å
¥å¤é¨å½æ°åå
å API å°±æ¯ä¸ºäºè§£å³ Java 访é®å¤é¨å½æ°åå¤é¨å
ååå¨çä¸äºçç¹ã
Foreign Function & Memory API (FFM API) å®ä¹äºç±»åæ¥å£ï¼
- åé
å¤é¨å
åï¼`MemorySegment`ã`MemoryAddress` å `SegmentAllocator`
- æä½å访é®ç»æåçå¤é¨å
åï¼`MemoryLayout`ã`VarHandle`
- æ§å¶å¤é¨å
åçåé
åéæ¾ï¼`MemorySession`
- è°ç¨å¤é¨å½æ°ï¼`Linker`ã`FunctionDescriptor` å `SymbolLookup`
ä¸é¢æ¯ FFM API 使ç¨ç¤ºä¾ï¼è¿æ®µä»£ç è·åäº C åºå½æ°ç `radixsort` æ¹æ³å¥æï¼ç¶å使ç¨å®å¯¹ Java æ°ç»ä¸çå个å符串è¿è¡æåºã
```java
// 1. å¨ C åºè·¯å¾ä¸æ¥æ¾å¤é¨å½æ°
Linker linker = Linker.nativeLinker();
SymbolLookup stdlib = linker.defaultLookup();
MethodHandle radixSort = linker.downcallHandle(
stdlib.lookup("radixsort"), ...);
// 2. åé
å ä¸å
å以åå¨å个å符串
String[] javaStrings = { "mouse", "cat", "dog", "car" };
// 3. åé
å å¤å
å以åå¨å个æé
SegmentAllocator allocator = implicitAllocator();
MemorySegment offHeap = allocator.allocateArray(ValueLayout.ADDRESS, javaStrings.length);
// 4. å°å符串ä»å ä¸å¤å¶å°å å¤
for (int i = 0; i < javaStrings.length; i++) {
// å¨å å¤åé
ä¸ä¸ªå符串ï¼ç¶åå卿åå®çæé
MemorySegment cString = allocator.allocateUtf8String(javaStrings[i]);
offHeap.setAtIndex(ValueLayout.ADDRESS, i, cString);
}
// 5. éè¿è°ç¨å¤é¨å½æ°å¯¹å 夿°æ®è¿è¡æåº
radixSort.invoke(offHeap, javaStrings.length, MemoryAddress.NULL, '\0');
// 6. å°ï¼éæ°æåºçï¼å符串ä»å å¤å¤å¶å°å ä¸
for (int i = 0; i < javaStrings.length; i++) {
MemoryAddress cStringPtr = offHeap.getAtIndex(ValueLayout.ADDRESS, i);
javaStrings[i] = cStringPtr.getUtf8String(0);
}
assert Arrays.equals(javaStrings, new String[] {"car", "cat", "dog", "mouse"}); // true
```
## JEP 425: èæçº¿ç¨ï¼é¢è§ï¼
èæçº¿ç¨ï¼Virtual Threadï¼æ¯ JDK è䏿¯ OS å®ç°çè½»é级线ç¨ï¼Lightweight Processï¼LWPï¼ï¼è®¸å¤èæçº¿ç¨å
±äº«åä¸ä¸ªæä½ç³»ç»çº¿ç¨ï¼èæçº¿ç¨çæ°éå¯ä»¥è¿å¤§äºæä½ç³»ç»çº¿ç¨çæ°éã
èæçº¿ç¨å¨å
¶ä»å¤çº¿ç¨è¯è¨ä¸å·²ç»è¢«è¯å®æ¯ååæç¨çï¼æ¯å¦ Go ä¸ç GoroutineãErlang ä¸çè¿ç¨ã
èæçº¿ç¨é¿å
äºä¸ä¸æåæ¢çé¢å¤èè´¹ï¼å
¼é¡¾äºå¤çº¿ç¨çä¼ç¹ï¼ç®åäºé«å¹¶åç¨åºç夿ï¼å¯ä»¥ææåå°ç¼åãç»´æ¤åè§å¯é«ååéå¹¶ååºç¨ç¨åºçå·¥ä½éã
ç¥ä¹æä¸ä¸ªå
³äº Java 19 èæçº¿ç¨çè®¨è®ºï¼æå
´è¶£çå¯ä»¥å»ççï¼