Java 27:在等待 Vector API 之前,密码学方面的进展

Java 27 : en attendant l’API Vector, des avancées cryptographiques

Silicon.fr Quality unknown · 质量未知 by Clément Bohic 2026-09-16 13:35 Original
摘要
Java 27(9月15日发布)继续推进JVM与安全相关的多项稳定改进:在64位架构上默认启用紧凑对象头(12字节降至8字节,含为Project Valhalla预留的4字节),Oracle称可减少约15%的GC周期,并在高度并行的JSON解析基准中最高提升约10%;同时G1在所有运行环境中成为默认垃圾回收器,并新增JFR中敏感数据的内存自动遮蔽。安全与加密方面,JDK引入TLS 1.3混合后量子密钥交换(基于KEM/ML-KEM,默认优先X25519+ML-KEM-768等三种方案,参照RFC 10024)以及PEM编码/解码API第三次预览;此外还更新了结构化并发(第7次预览)与LazyConstant(第3次预览),但Vector API仍处孵化阶段,且需等Project Valhalla关键组件进入预览后才会进一步落地。

Java 27, publié le 15 septembre, confirme une tendance désormais familière : l’API Vector reste en phase d’incubation. Cette situation devrait durer tant que les briques de Project Valhalla n’auront pas elles-mêmes atteint le stade de preview. Valhalla vise à rapprocher l’expressivité de la programmation orientée objet des performances et de la compacité des types primitifs, notamment via les value objects, dépourvus d’identité propre — donc sans en-tête ni verrou de moniteur — afin d’optimiser leur représentation en mémoire et dans les registres CPU, un point clé pour le calcul vectoriel intensif.

En attendant, Java 27 généralise plusieurs optimisations déjà attendues. La JVM HotSpot active désormais par défaut les en-têtes d’objets compacts sur les architectures 64 bits : leur taille passe de 12 à 8 octets, dont 4 réservés aux besoins futurs de Project Valhalla. Oracle annonce à la clé une réduction d’environ 15 % du nombre de cycles GC, ainsi qu’un gain pouvant atteindre 10 % sur des benchmarks de parsing JSON fortement parallèles. Ces en-têtes sont déjà utilisés en production chez Amazon sur des centaines de services, et SAP les a activés dans SapMachine, son fork d’OpenJDK.

Le ramasse-miettes G1 devient lui aussi le collecteur par défaut sur tous les environnements d’exécution. Jusqu’ici, il n’était pas activé par défaut sur les machines dotées d’un seul cœur CPU ou de moins de 1792 Mo de mémoire physique. Java 27 le rend donc universel, en misant sur un compromis jugé désormais compétitif à la fois en débit et en empreinte mémoire, tout en conservant son avantage sur les temps de pause.

Autre stabilisation importante : le masquage automatique des données sensibles dans les enregistrements JFR. Le traitement s’effectue en mémoire afin d’éviter que des secrets ne persistent dans des fichiers temporaires après un crash JVM ou ne fuitent lors d’un streaming d’événements à distance. L’option consistant à s’appuyer sur des expressions régulières a été écartée, car l’API `java.util.regex` ralentirait le démarrage de la JVM, tandis que des bibliothèques C++ pourraient lever des exceptions, ce qui est interdit dans HotSpot.

Sur le front du chiffrement, Java 27 apporte la prise en charge des échanges de clés hybrides post-quantiques pour TLS 1.3. Cette évolution s’appuie sur des fondations déjà présentes dans le JDK, notamment l’API KEM introduite dans Java 21 et l’algorithme ML-KEM ajouté dans Java 24. Trois schémas, tous décrits dans la RFC 10024, sont proposés : `X25519MLKEM768`, activé et prioritaire par défaut, ainsi que `SecP256r1MLKEM768` et `SecP384r1MLKEM1024`, tous deux optionnels et non actifs par défaut.

Le JDK intègre aussi une API dédiée à l’encodage et au décodage des objets cryptographiques vers et depuis le format PEM, standard de facto défini par la RFC 7468. Il s’agit de sa troisième préversion. Cette version ajoute notamment la prise en charge des paires de clés chiffrées, avec des méthodes capables de déchiffrer des textes PKCS#8 contenant également une clé publique, ainsi qu’une classe `CryptoException` pour signaler les échecs de traitement. Plusieurs alternatives ont été étudiées puis rejetées : l’extension de `EncodedKeySpec` via une sous-classe PEM, jugée insuffisante car incapable de couvrir certificats et listes de révocation, et l’ajout de méthodes d’encodage dans `KeyFactory` et `CertificateFactory`, écarté en raison de la complexité asymétrique des multiples représentations et formats des clés.

Java 27 marque aussi une 7e préversion de l’API de concurrence structurée. L’objectif reste de simplifier l’écriture du code multithread et d’en renforcer la robustesse en traitant des groupes de sous-tâches concurrentes comme une unité de travail atomique. Cette révision refond la gestion des timeouts et améliore le traitement des exceptions dans les joiners.

Enfin, l’API `LazyConstant` passe en troisième preview. Elle vise à mieux économiser les ressources en différant l’initialisation de données immuables. Cette version supprime les méthodes de bas niveau `isInitialized()` et `orElse()`, afin d’éviter des contournements contraires à l’esprit de l’API.

Summary
Oracle has released Java 27 (Sept. 15), keeping Project Valhalla’s value-object work in preview while shipping default compact object headers in HotSpot on 64-bit systems (12→8 bytes, with 4 bytes reserved for Valhalla), which Oracle says reduces GC cycles ~15% and improves highly parallel JSON parsing by up to ~10% (with Amazon and SAP already using similar header optimizations). Java 27 also makes G1 the default garbage collector across all runtime environments, adds automatic in-memory masking of sensitive data in JFR, and expands security features including TLS 1.3 hybrid post-quantum key exchange (via KEM/ML-KEM) and a third preview of a PEM encoding API. Additional language/runtime updates include a 7th preview of structured concurrency, a 3rd preview of LazyConstant, and continued refinement of timeouts and exception handling for joiners.

Java 27, arrivé le 15 septembre, confirme une attente désormais familière : l’API Vector reste en incubation, faute de progression suffisante des briques de Project Valhalla vers la preview. Ce chantier vise à rapprocher l’expressivité de la programmation orientée objet des performances et de la compacité des types primitifs, notamment via les value objects, dépourvus d’identité propre, d’en-tête et de verrou de moniteur. Leur encodage plus compact en mémoire et dans les registres CPU doit notamment profiter au calcul vectoriel intensif.

En attendant, Java 27 généralise plusieurs optimisations déjà éprouvées. Les en-têtes d’objets compacts deviennent activés par défaut dans la JVM HotSpot sur architectures 64 bits : ils passent de 12 à 8 octets, dont 4 réservés aux besoins futurs de Valhalla. Oracle évoque une baisse d’environ 15 % du nombre de cycles GC et jusqu’à 10 % de temps gagné sur des benchmarks de parsing JSON fortement parallèles. Amazon les utilise déjà en production sur des centaines de services, tandis que SAP les a activés dans SapMachine, son fork d’OpenJDK.

Le ramasse-miettes G1 devient lui aussi le collecteur par défaut sur tous les environnements d’exécution. Jusqu’ici, il n’était pas retenu sur les machines à un seul cœur CPU ou disposant de moins de 1792 Mo de mémoire physique. Java 27 le rend donc systématique, en conservant ses atouts sur les temps de pause tout en restant compétitif en débit et en empreinte mémoire.

Autre stabilisation notable : le masquage automatique des données sensibles dans les enregistrements JFR. Le traitement s’effectue en mémoire afin d’éviter que des secrets ne persistent dans des fichiers temporaires après un crash JVM ou ne soient exposés lors d’un streaming d’événements à distance. L’approche par expressions régulières a été écartée, car elle ralentirait le démarrage de la JVM via java.util.regex et parce que les bibliothèques C++ peuvent lever des exceptions, interdites dans HotSpot.

Sur le plan cryptographique, Java 27 ajoute la prise en charge des échanges de clés hybrides post-quantiques pour TLS 1.3, en s’appuyant sur l’API KEM introduite dans Java 21 et sur ML-KEM, arrivé dans Java 24. Trois schémas, décrits dans la RFC 10024, sont proposés : X25519MLKEM768, activé et prioritaire par défaut ; SecP256r1MLKEM768, optionnel ; et SecP384r1MLKEM1024, également optionnel.

Le JDK intègre aussi une API d’encodage et de décodage des objets cryptographiques vers et depuis le format PEM, standard de facto défini par la RFC 7468. Cette API en est à sa troisième préversion. Elle ajoute notamment la gestion des paires de clés chiffrées, avec des méthodes capables de déchiffrer des textes PKCS#8 contenant aussi une clé publique, ainsi qu’une classe CryptoException pour signaler les échecs de traitement. Oracle a écarté plusieurs alternatives, dont l’extension d’EncodedKeySpec, jugée insuffisante pour couvrir certificats et listes de révocation, et l’ajout de méthodes dans KeyFactory et CertificateFactory, considéré comme trop complexe au vu de la multiplicité des représentations des clés.

Java 27 apporte enfin une 7e préversion de l’API de concurrence structurée, destinée à simplifier le multithreading et à renforcer la robustesse en traitant des groupes de sous-tâches concurrentes comme une unité atomique. Cette révision refond la gestion des timeouts et affine le traitement des exceptions dans les joiners. L’API LazyConstant passe, elle, en troisième preview : elle vise à différer l’initialisation de données immuables pour mieux optimiser l’usage des ressources, tout en supprimant les méthodes de bas niveau isInitialized() et orElse() afin d’éviter des contournements contraires à son intention.

Résumé
Java 27 (sorti le 15 septembre) consolide plusieurs évolutions majeures : activation par défaut des en-têtes d’objets compacts dans HotSpot (12→8 octets, avec 4 octets réservés à Project Valhalla), baisse annoncée d’environ 15 % des cycles GC et jusqu’à 10 % sur des benchmarks JSON parallèles, ainsi que le passage de G1 au statut de collecteur par défaut sur tous les environnements. Côté sécurité, Oracle stabilise le masquage automatique des données sensibles dans les enregistrements JFR et ajoute la prise en charge TLS 1.3 avec échanges de clés hybrides post-quantiques (via KEM/ML-KEM) ainsi qu’une 3e préversion d’API pour l’encodage/décodage PEM. Enfin, Java 27 poursuit l’outillage de la concurrence (7e préversion de la concurrence structurée, timeouts et exceptions améliorés) et de la performance (3e preview de LazyConstant), tandis que l’API Vector reste en incubation en attendant les briques de Project Valhalla.

On s’y est habitué : une nouvelle version du JDK… et l’API Vector qui reste en phase d’incubation.

Pas d’exception avec Java 27, arrivé ce 15 septembre. On en restera de toute façon à ce stade aussi longtemps que les briques de Project Valhalla ne seront pas passées en preview.

Project Valhalla est censé réconcilier l’expressivité de la programmation orientée objet avec les performances et la compacité des types primitifs. Cela passe notamment par les value objects. Ils n’ont pas identité propre (absence d’en-tête et de verrou de moniteur, entre autres). Cela permet d’optimiser leur encodage en mémoire et dans les registres CPU. Un avantage pour le calcul vectoriel intensif.

Généralisation des en-têtes compacts…

En attendant, Java 27 concrétise l’activation par défaut des en-têtes d’objets compacts au sein de la JVM HotSpot sur les architectures 64 bits. Ils passent de 12 à 8 octets – dont 4 réservés aux besoins de Project Valhalla. Oracle annonce une diminution d’environ 15 % du nombre de cycles GC. Et jusqu’à 10 % de temps gagné sur des benchmarks de parsing JSON fortement parallèles. Amazon exploite déjà ces en-têtes en production sur des centaines de services. SAP les activés sur SapMachine, son fork d’OpenJDK.

… du ramasse-miettes G1…

Concernant justement le ramasse-miettes : G1 devient le collecteur par défaut sur tous les environnements d’exécution. Jusque-là, il ne l’était pas sur les environnements disposant d’un seul cœur CPU ou de moins de 1792 Mo de mémoire physique. Le voilà désormais compétitif sur les débits comme sur l’empreinte mémoire, tout en conservant son avantage intrinsèque sur les temps de pause.

… et du masquage des données sensibles en mémoire

Autre élément stabilisé avec Java 27 : le masquage automatique des données sensibles dans les enregistrements du JFR. L’opération se fait en mémoire. Objectif : éviter que des secrets persistent dans les fichiers temporaires lors d’un crash JVM ou filtrent lors d’un streaming d’événements à distance. L’alternative regex a été rejetée à deux titres. D’une part, parce que l’API java.util.regex ralentirait le démarrage de la JVM. De l’autre, parce que les bibliothèques C++ peuvent lever des exceptions, interdites dans HotSpot.

Trois schémas hybrides post-quantiques pour TLS

Il y a aussi du nouveau sur le chiffrement. En l’occurrence, la prise en charge des échanges de clés hybrides post-quantiques pour le protocole TLS 1.3. Elle exploite les fondations déjà intégrées dans le JDK, à commencer par l’API KEM (Java 21) et l’algo ML-KEM (Java 24). Au menu, trois schémas, tous décrits dans la RFC 10024.

Schéma hybride

Algorithme classique (ECDHE)

Algorithme post-quantique

Statut par défaut

X25519MLKEM768

X25519

ML-KEM-768

Activé et prioritaire par défaut

SecP256r1MLKEM768

Curve secp256r1

ML-KEM-768

Optionnel (non actif par défaut)

SecP384r1MLKEM1024

Curve secp384r1

ML-KEM-1024

Optionnel (non actif par défaut)

Une API pour l’encodage PEM

Le JDK comporte aussi une API pour encoder et décoder les objets cryptographiques vers et depuis le standard de facto qu’est le format PEM (Privacy-Enhanced Mail, RFC 7468). C’en est la troisième préversion. Elle ajoute en particulier la gestion des paires de clés chiffrées (méthodes pour déchiffrer des textes PKCS#8 contenant également une clé publique) et une classe CryptoException qui indique les échecs de traitement.

Plusieurs pistes alternatives ont été étudiées. Dont une consistant à étendre l’API EncodedKeySpec avec une sous-classe qui aurait encapsulé le texte PEM et permis la conversion vers ou depuis les spécifications habituelles de clés. Option rejetée faute de gérer certificats et listes de révocation. N’a pas non plus été suivie la piste consistant à ajouter des méthodes d’encodage dans les classes KeyFactory et CertificateFactory. Essentiellement en raison de la complexité asymétrique, les clés existant sous de multiples représentations et formats.

3e préversion pour LazyConstant, 7e pour la concurrence structurée

Java 27, c’est également une nouvelle préversion (la 7e) de l’API de concurrence structurée. Elle doit simplifier l’écriture du code multithread et en accroître la robustesse en traitant des groupes de sous-tâches concurrentes comme une unité de travail atomique.

Cette nouvelle révision refond la gestion des timeouts. Elle affine par ailleurs la gestion des exceptions dans les joiners.

L’API LazyConstant en est quant à elle à sa troisième preview. Sa promesse : optimiser l’usage des ressources en permettant de différer l’initialisation de données immuables.

Cette révision supprime les méthodes de bas niveau isInitialized() et orElse() pour éviter les contournements contraires à l’esprit de l’API.

Illustration © iuriimotov – Adobe Stock

The post Java 27 : en attendant l’API Vector, des avancées cryptographiques appeared first on Silicon.fr.

AI Insight
Core Point

Java 27(9/15)落地多项JVM与安全增强:紧凑对象头默认化、G1成为默认GC、JFR敏感数据内存遮蔽,以及TLS 1.3混合后量子密钥交换与PEM编码API预览,虽Vector仍在孵化但安全与性能推进明显。

Key Players

Oracle — Java/JDK与HotSpot维护方,发布Java 27并推进JVM与安全特性。

Amazon — 云服务提供商,在生产中已启用紧凑对象头(数百服务)。

SAP — 企业软件与Java生态,SapMachine分支已启用紧凑对象头。

Industry Impact
  • Computing/AI: Medium — JSON并行解析等基准获约10%提升,利于高吞吐数据处理。
  • ICT: High — TLS 1.3后量子混合密钥交换、JFR敏感数据遮蔽与PEM API预览,直接提升企业安全合规与加密互操作。
  • Energy: Low — GC周期约减少15%可能间接降低能耗,但影响需以实际部署验证。
Tracking

[Strongly track] — TLS后量子混合与JFR内存遮蔽属安全关键变更,且GC/对象头默认化会影响性能与运维基线。

Related Companies
positive
Amazon
mature
positive
Oracle
mature
positive
SAP
mature
neutral
neutral
positive
positive
positive
Categories
软件 网络安全
AI Processing
2026-09-16 13:56
openai / gpt-5.4-nano