---
title: Java 25 æ°ç¹æ§æ¦è§
description: æ¦è§ JDK 25 çå
³é®æ°ç¹æ§ä¸é¢è§æ¹å¨ï¼å
³æ³¨å¹¶åãGC ä¸è¯è¨/å¹³å°å¢å¼ºã
category: Java
tag:
- Javaæ°ç¹æ§
head:
- - meta
- name: keywords
content: Java 25,JDK25,LTS,ä½ç¨åå¼,ç´§å对象头,å代 Shenandoah,模å导å
¥,ç»æåå¹¶å
---
JDK 25 äº 2025 å¹´ 9 æ 16 æ¥ åå¸ï¼è¿æ¯ä¸ä¸ªé常éè¦ççæ¬ï¼éç¨ç¢å¼ã
JDK 25 æ¯ LTSï¼é¿ææ¯æçï¼ï¼è³æ¤ä¸ºæ¢ï¼ç®åæ JDK8ãJDK11ãJDK17ãJDK21 å JDK 25 è¿äºä¸ªé¿ææ¯æçäºã
JDK 25 å
±æ 18 个æ°ç¹æ§ï¼è¿ç¯æç« 伿éå
¶ä¸è¾ä¸ºéè¦çä¸äºæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ï¼
- [JEP 506: Scoped Values (ä½ç¨åå¼)](https://openjdk.org/jeps/506)
- [JEP 512: Compact Source Files and Instance Main Methods (ç´§åæºæä»¶ä¸å®ä¾ä¸»æ¹æ³)](https://openjdk.org/jeps/512)
- [JEP 519: Compact Object Headers (ç´§å对象头)](https://openjdk.org/jeps/519)
- [JEP 521: Generational Shenandoah (å代 Shenandoah GC)](https://openjdk.org/jeps/521)
- [JEP 507: Primitive Types in Patterns, instanceof, and switch (模å¼å¹é
æ¯æåºæ¬ç±»å, ç¬¬ä¸æ¬¡é¢è§)](https://openjdk.org/jeps/507)
- [JEP 505: Structured Concurrency (ç»æåå¹¶å, ç¬¬äºæ¬¡é¢è§)](https://openjdk.org/jeps/505)
- [JEP 511: Module Import Declarations (模å导å
¥å£°æ)](https://openjdk.org/jeps/511)
- [JEP 513: Flexible Constructor Bodies (çµæ´»çæé 彿°ä½)](https://openjdk.org/jeps/513)
- [JEP 508: Vector API (åé API, ç¬¬åæ¬¡åµå)](https://openjdk.org/jeps/508)
ä¸å¾æ¯ä» JDK 8 å° JDK 25 æ¯ä¸ªçæ¬çæ´æ°å¸¦æ¥çæ°ç¹æ§æ°éåæ´æ°æ¶é´ï¼

## JDK 25
### JEP 506: ä½ç¨åå¼
ä½ç¨åå¼ï¼Scoped Valuesï¼å¯ä»¥å¨çº¿ç¨å
å线ç¨é´å
±äº«ä¸å¯åçæ°æ®ï¼ä¼äºçº¿ç¨å±é¨åé `ThreadLocal` ï¼å°¤å
¶æ¯å¨ä½¿ç¨å¤§éèæçº¿ç¨æ¶ã
```java
final static ScopedValue<...> V = new ScopedValue<>();
// In some method
ScopedValue.where(V, )
.run(() -> { ... V.get() ... call methods ... });
// In a method called directly or indirectly from the lambda expression
... V.get() ...
```
ä½ç¨åå¼éè¿å
¶âåå
¥æ¶å¤å¶â(copy-on-write)çç¹æ§ï¼ä¿è¯äºæ°æ®å¨çº¿ç¨é´çé离ä¸å®å
¨ï¼åæ¶æ§è½æé«ï¼å ç¨å
å乿ä½ãè¿ä¸ªç¹æ§å°æä¸ºæªæ¥ Java å¹¶åç¼ç¨çæ åå®è·µã
### JEP 512: ç´§åæºæä»¶ä¸å®ä¾ä¸»æ¹æ³
è¯¥ç¹æ§ç¬¬ä¸æ¬¡é¢è§æ¯ç± [JEP 445](https://openjdk.org/jeps/445 "JEP 445") ï¼JDK 21 ï¼æåºï¼éåç»è¿äº JDK 22 ãJDK 23 å JDK 24 çæ¹è¿åå®åï¼æç»å¨ JDK 25 顺å©è½¬æ£ã
è¿ä¸ªæ¹è¿æå¤§å°ç®åäºç¼åç®å Java ç¨åºçæ¥éª¤ï¼å
许å°ç±»åä¸»æ¹æ³åå¨åä¸ä¸ªæ²¡æé¡¶çº§ `public class`çæä»¶ä¸ï¼å¹¶å
许 `main` æ¹æ³æä¸ºä¸ä¸ªééæçå®ä¾æ¹æ³ã
```java
class HelloWorld {
void main() {
System.out.println("Hello, World!");
}
}
```
è¿ä¸æ¥ç®åï¼
```java
void main() {
System.out.println("Hello, World!");
}
```
è¿æ¯ä¸ºäºéä½ Java çå¦ä¹ 鍿§åæåç¼åå°åç¨åºãèæ¬çæçèè¿åºçä¸å¤§æ¥ãåå¦è
ä¸åéè¦çè§£ `public static void main(String[] args)` è¿ä¸é¿ä¸²å¤æç声æã对äºå¿«éååéªè¯åèæ¬ç¼åï¼è¿ä¹ä½¿å¾ Java æä¸ºä¸ä¸ªæ´æå¸å¼åçéæ©ã
### JEP 519: ç´§å对象头
è¯¥ç¹æ§ç¬¬ä¸æ¬¡é¢è§æ¯ç± [JEP 450](https://openjdk.org/jeps/450 "JEP 450") ï¼JDK 24 ï¼æåºï¼JDK 25 就顺å©è½¬æ£äºã
éè¿ä¼å对象头çå
é¨ç»æï¼å¨ 64 使¶æç HotSpot èææºä¸ï¼å°å¯¹è±¡å¤´å¤§å°ä»åæ¬ç 96-128 ä½ï¼12-16 åèï¼ç¼©åè³ 64 ä½ï¼8 åèï¼ï¼æç»å®ç°åå°å å
åå ç¨ãæåé¨ç½²å¯åº¦ãå¢å¼ºæ°æ®å±é¨æ§çææã
ç´§å对象头并没ææä¸º JVM é»è®¤ç对象头å¸å±æ¹å¼ï¼ééè¿æ¾å¼é
ç½®å¯ç¨ï¼
- JDK 24 ééè¿å½ä»¤è¡åæ°ç»åå¯ç¨ï¼
`$ java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ...` ï¼
- JDK 25 ä¹åä»
é `-XX:+UseCompactObjectHeaders` å³å¯å¯ç¨ã
### JEP 521: å代 Shenandoah GC
Shenandoah GC å¨ JDK12 ä¸æä¸ºæ£å¼å¯ç产使ç¨ç GCï¼é»è®¤å
³éï¼éè¿ `-XX:+UseShenandoahGC` å¯ç¨ã
Redhat 主导å¼åç Pauseless GC å®ç°ï¼ä¸»è¦ç®æ æ¯ 99.9% çæåå°äº 10msï¼æåä¸å 大尿 å
³ç
ä¼ ç»ç Shenandoah 对æ´ä¸ªå è¿è¡å¹¶åæ è®°åæ´çï¼è½ç¶æåæ¶é´æçï¼ä½å¨å¤çå¹´è½»ä»£å¯¹è±¡æ¶æçä¸å¦å代 GCãå¼å
¥å代åï¼Shenandoah å¯ä»¥æ´é¢ç¹ãæ´é«æå°åæ¶å¹´è½»ä»£ä¸ç大éâæç夿»âç对象ï¼ä½¿å
¶å¨ä¿ææä½æåæ¶é´çåæ¶ï¼æ¥æäºæ´é«çååéåæ´ä½ç CPU å¼éã
Shenandoah GC éè¦éè¿å½ä»¤å¯ç¨ï¼
- JDK 24 ééè¿å½ä»¤è¡åæ°ç»åå¯ç¨ï¼`-XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=generational`
- JDK 25 ä¹åä»
é `-XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational` å³å¯å¯ç¨ã
### JEP 507: 模å¼å¹é
æ¯æåºæ¬ç±»å (ç¬¬ä¸æ¬¡é¢è§)
è¯¥ç¹æ§ç¬¬ä¸æ¬¡é¢è§æ¯ç± [JEP 455](https://openjdk.org/jeps/455 "JEP 455") ï¼JDK 23 ï¼æåºã
模å¼å¹é
å¯ä»¥å¨ `switch` å `instanceof` è¯å¥ä¸å¤çææçåºæ¬æ°æ®ç±»åï¼`int`, `double`, `boolean` çï¼
```java
static void test(Object obj) {
if (obj instanceof int i) {
System.out.println("è¿æ¯ä¸ä¸ªintç±»å: " + i);
}
}
```
è¿æ ·å°±å¯ä»¥åå¤ç对象类å䏿 ·ï¼å¯¹åºæ¬ç±»åè¿è¡æ´å®å
¨ãæ´ç®æ´çç±»åå¹é
å转æ¢ï¼è¿ä¸æ¥æ¶é¤äº Java ä¸ç模æ¿ä»£ç ã
### JEP 505: ç»æåå¹¶å(ç¬¬äºæ¬¡é¢è§)
JDK 19 å¼å
¥äºç»æåå¹¶åï¼ä¸ç§å¤çº¿ç¨ç¼ç¨æ¹æ³ï¼ç®çæ¯ä¸ºäºéè¿ç»æåå¹¶å API æ¥ç®åå¤çº¿ç¨ç¼ç¨ï¼å¹¶ä¸æ¯ä¸ºäºå代`java.util.concurrent`ï¼ç®åå¤äºåµåå¨é¶æ®µã
ç»æåå¹¶åå°ä¸å线ç¨ä¸è¿è¡çå¤ä¸ªä»»å¡è§ä¸ºå个工ä½åå
ï¼ä»èç®åé误å¤çãæé«å¯é æ§å¹¶å¢å¼ºå¯è§å¯æ§ãä¹å°±æ¯è¯´ï¼ç»æåå¹¶åä¿çäºå线ç¨ä»£ç çå¯è¯»æ§ãå¯ç»´æ¤æ§åå¯è§å¯æ§ã
ç»æåå¹¶åçåºæ¬ API æ¯`StructuredTaskScope`ï¼å®æ¯æå°ä»»å¡æå为å¤ä¸ªå¹¶ååä»»å¡ï¼å¨å®ä»¬èªå·±ç线ç¨ä¸æ§è¡ï¼å¹¶ä¸åä»»å¡å¿
é¡»å¨ä¸»ä»»å¡ç»§ç»ä¹å宿ã
`StructuredTaskScope` çåºæ¬ç¨æ³å¦ä¸ï¼
```java
try (var scope = new StructuredTaskScope