---
title: Java 24 æ°ç¹æ§æ¦è§
description: æ»ç» JDK 24 çæ°ç¹æ§ä¸æ¹å¨ï¼ä¾¿äºè·è¸ª Java æ¼è¿ã
category: Java
tag:
- Javaæ°ç¹æ§
head:
- - meta
- name: keywords
content: Java 24,JDK24,JEP æ´æ°,è¯è¨ç¹æ§,GC æ¹è¿,å¹³å°å¢å¼º
---
JDK 24 äº 2025 å¹´ 3 æåå¸ï¼è¿æ¯ä¸ä¸ªé LTSï¼é¿ææ¯æçï¼çæ¬ãä¸ä¸ä¸ªé¿ææ¯æçæ¯ **JDK 25**ï¼é¢è®¡äº 2025 å¹´ 9 æåå¸ã
JDK 24 å
±æ 24 个æ°ç¹æ§ï¼è¿ç¯æç« 伿éå
¶ä¸è¾ä¸ºéè¦çä¸äºæ°ç¹æ§è¿è¡è¯¦ç»ä»ç»ï¼
- [JEP 478: Key Derivation Function API (å¯é¥æ´¾ç彿° API)](https://openjdk.org/jeps/478)
- [JEP 483: Early Class-File Loading & Linking (æåç±»å è½½å龿¥)](https://openjdk.org/jeps/483)
- [JEP 484: Class File API (ç±»æä»¶ API)](https://openjdk.org/jeps/484)
- [JEP 485: Stream Gatherers (æµæ¶éå¨)](https://openjdk.org/jeps/485)
- [JEP 486: Disable the Security Manager (æ°¸ä¹
ç¦ç¨å®å
¨ç®¡çå¨)](https://openjdk.org/jeps/486)
- [JEP 487: Scoped Values (ä½ç¨åå¼, ç¬¬åæ¬¡é¢è§)](https://openjdk.org/jeps/487)
- [JEP 495: Simplified Source Files and Instance Main Methods (ç®åçæºæä»¶åå®ä¾ä¸»æ¹æ³, ç¬¬åæ¬¡é¢è§)](https://openjdk.org/jeps/495)
- [JEP 497: Quantum-Resistant Digital Signature Algorithm (ML-DSA) (éåææ§æ°åç¾åç®æ³)](https://openjdk.org/jeps/497)
- [JEP 499: Structured Concurrency (ç»æåå¹¶å, ç¬¬åæ¬¡é¢è§)](https://openjdk.org/jeps/499)
ä¸å¾æ¯ä» JDK 8 å° JDK 25 æ¯ä¸ªçæ¬çæ´æ°å¸¦æ¥çæ°ç¹æ§æ°éåæ´æ°æ¶é´ï¼

## JEP 478: Key Derivation Function API (å¯é¥æ´¾ç彿° API)
å¯é¥æ´¾ç彿° API æ¯ä¸ç§ç¨äºä»åå§å¯é¥åå
¶ä»æ°æ®æ´¾çé¢å¤å¯é¥çå å¯ç®æ³ãå®çæ ¸å¿ä½ç¨æ¯ä¸ºä¸åçå å¯ç®çï¼å¦å å¯ã认è¯çï¼çæå¤ä¸ªä¸åçå¯é¥ï¼é¿å
å¯é¥éå¤ä½¿ç¨å¸¦æ¥çå®å
¨éæ£ãè¿å¨æ°ä»£å å¯ä¸æ¯ä¸ä¸ªéè¦çéç¨ç¢ï¼ä¸ºåç»æ°å
´çéå计ç®ç¯å¢æä¸äºåºç¡ã
éè¿è¯¥ APIï¼å¼åè
å¯ä»¥ä½¿ç¨ææ°çå¯é¥æ´¾çç®æ³ï¼å¦ HKDF åæªæ¥ç Argon2ï¼ï¼
```java
// å建ä¸ä¸ª KDF 对象ï¼ä½¿ç¨ HKDF-SHA256 ç®æ³
KDF hkdf = KDF.getInstance("HKDF-SHA256");
// å建 Extract å Expand åæ°è§è
AlgorithmParameterSpec params =
HKDFParameterSpec.ofExtract()
.addIKM(initialKeyMaterial) // 设置åå§å¯é¥ææ
.addSalt(salt) // 设置çå¼
.thenExpand(info, 32); // 设置æ©å±ä¿¡æ¯åç®æ é¿åº¦
// æ´¾çä¸ä¸ª 32 åèç AES å¯é¥
SecretKey key = hkdf.deriveKey("AES", params);
// å¯ä»¥ä½¿ç¨ç¸åç KDF 对象è¿è¡å
¶ä»å¯é¥æ´¾çæä½
```
## JEP 483: Early Class-File Loading & Linking (æåç±»å è½½å龿¥)
å¨ä¼ ç» JVM ä¸ï¼åºç¨å¨æ¯æ¬¡å¯å¨æ¶éè¦å¨æå è½½å龿¥ç±»ãè¿ç§æºå¶å¯¹å¯å¨æ¶é´ææçåºç¨ï¼å¦å¾®æå¡ææ æå¡å¨å½æ°ï¼å¸¦æ¥äºæ¾èçæ§è½ç¶é¢ãè¯¥ç¹æ§éè¿ç¼åå·²å è½½å龿¥çç±»ï¼æ¾èåå°äºéå¤å·¥ä½çå¼éï¼æ¾èåå° Java åºç¨ç¨åºçå¯å¨æ¶é´ãæµè¯è¡¨æï¼å¯¹å¤§ååºç¨ï¼å¦åºäº Spring çæå¡å¨åºç¨ï¼ï¼å¯å¨æ¶é´å¯åå° 40% 以ä¸ã
è¿ä¸ªä¼åæ¯é¶ä¾µå
¥æ§çï¼å¯¹åºç¨ç¨åºãåºææ¡æ¶çä»£ç æ é任使´æ¹ï¼å¯å¨ä¹æ¹å¼ä¿æä¸è´ï¼ä»
éæ·»å ç¸å
³ JVM åæ°ï¼å¦ `-XX:+ClassDataSharing`ï¼ã
## JEP 484: Class File API (ç±»æä»¶ API)
ç±»æä»¶ API å¨ JDK 22 è¿è¡äºç¬¬ä¸æ¬¡é¢è§ï¼[JEP 457](https://openjdk.org/jeps/457)ï¼ï¼å¨ JDK 23 è¿è¡äºç¬¬äºæ¬¡é¢è§å¹¶è¿ä¸æ¥å®åï¼[JEP 466](https://openjdk.org/jeps/466)ï¼ãæç»ï¼è¯¥ç¹æ§å¨ JDK 24 ä¸é¡ºå©è½¬æ£ã
ç±»æä»¶ API çç®æ æ¯æä¾ä¸å¥æ ååç APIï¼ç¨äºè§£æãçæåè½¬æ¢ Java ç±»æä»¶ï¼å代è¿å»å¯¹ç¬¬ä¸æ¹åºï¼å¦ ASMï¼å¨ç±»æä»¶å¤çä¸çä¾èµã
```java
// å建ä¸ä¸ª ClassFile 对象ï¼è¿æ¯æä½ç±»æä»¶çå
¥å£ã
ClassFile cf = ClassFile.of();
// è§£æåèæ°ç»ä¸º ClassModel
ClassModel classModel = cf.parse(bytes);
// æå»ºæ°çç±»æä»¶ï¼ç§»é¤ä»¥ "debug" å¼å¤´çæææ¹æ³
byte[] newBytes = cf.build(classModel.thisClass().asSymbol(),
classBuilder -> {
// éåææç±»å
ç´
for (ClassElement ce : classModel) {
// 夿æ¯å¦ä¸ºæ¹æ³ ä¸ æ¹æ³å以 "debug" å¼å¤´
if (!(ce instanceof MethodModel mm
&& mm.methodName().stringValue().startsWith("debug"))) {
// æ·»å å°æ°çç±»æä»¶ä¸
classBuilder.with(ce);
}
}
});
```
## JEP 485: Stream Gatherers (æµæ¶éå¨)
æµæ¶éå¨ `Stream::gather(Gatherer)` æ¯ä¸ä¸ªå¼ºå¤§çæ°ç¹æ§ï¼å®å
许å¼åè
å®ä¹èªå®ä¹çä¸é´æä½ï¼ä»èå®ç°æ´å¤æãæ´çµæ´»çæ°æ®è½¬æ¢ã`Gatherer` æ¥å£æ¯è¯¥ç¹æ§çæ ¸å¿ï¼å®å®ä¹äºå¦ä½ä»æµä¸æ¶éå
ç´ ï¼ç»´æ¤ä¸é´ç¶æï¼å¹¶å¨å¤çè¿ç¨ä¸çæç»æã
ä¸ç°æç `filter`ã`map` æ `distinct` çå
ç½®æä½ä¸åï¼`Stream::gather` 使å¾å¼åè
è½å¤å®ç°é£äºé¾ä»¥ç¨æ å Stream æä½å®æçä»»å¡ãä¾å¦ï¼å¯ä»¥ä½¿ç¨ `Stream::gather` å®ç°æ»å¨çªå£ãèªå®ä¹è§åçå»éãæè
æ´å¤æçç¶æè½¬æ¢åèåã è¿ç§çµæ´»æ§æå¤§å°æ©å±äº Stream API çåºç¨èå´ï¼ä½¿å¼åè
è½å¤åºå¯¹æ´å¤æçæ°æ®å¤çåºæ¯ã
åºäº `Stream::gather(Gatherer)` å®ç°å符串é¿åº¦çå»éé»è¾ï¼
```java
var result = Stream.of("foo", "bar", "baz", "quux")
.gather(Gatherer.ofSequential(
HashSet::new, // åå§åç¶æä¸º HashSet,ç¨äºä¿åå·²ç»éå°è¿çå符串é¿åº¦
(set, str, downstream) -> {
if (set.add(str.length())) {
return downstream.push(str);
}
return true; // ç»§ç»å¤çæµ
}
))
.toList();// 转æ¢ä¸ºå表
// è¾åºç»æ ==> [foo, quux]
```
## JEP 486: Disable the Security Manager (æ°¸ä¹
ç¦ç¨å®å
¨ç®¡çå¨)
JDK 24 ä¸åå
许å¯ç¨ `Security Manager`ï¼å³ä½¿éè¿ `java -Djava.security.manager`å½ä»¤ä¹æ æ³å¯ç¨ï¼è¿æ¯éæ¥ç§»é¤è¯¥åè½çå
³é®ä¸æ¥ãè½ç¶ `Security Manager` æ¾ç»æ¯ Java ä¸éå¶ä»£ç æéï¼å¦è®¿é®æä»¶ç³»ç»æç½ç»ã读åæåå
¥æææä»¶ãæ§è¡ç³»ç»å½ä»¤ï¼çéè¦å·¥å
·ï¼ä½ç±äºå¤ææ§é«ã使ç¨çä½ä¸ç»´æ¤ææ¬å¤§ï¼Java 社åºå³å®æç»ç§»é¤å®ã
## JEP 487: Scoped Values (ä½ç¨åå¼, ç¬¬åæ¬¡é¢è§)
ä½ç¨åå¼ï¼Scoped Valuesï¼å¯ä»¥å¨çº¿ç¨å
å线ç¨é´å
±äº«ä¸å¯åçæ°æ®ï¼ä¼äºçº¿ç¨å±é¨åéï¼å°¤å
¶æ¯å¨ä½¿ç¨å¤§éèæçº¿ç¨æ¶ã
```java
final static ScopedValue<...> V = new ScopedValue<>();
// In some method
ScopedValue.where(V,