Technologie

Java 27 supprime le GC bloquant et réduit la mémoire des objets de 33%

Adrian Kessler
Ajoutez-nous sur Google

Java 27 apporte deux modifications qui toucheront silencieusement chaque JVM en fonctionnement. Le garbage collector G1 devient désormais le défaut sur tous les runtimes Java — mettant fin au maintien du collecteur Serial qui bloquait l’application sur les machines aux ressources limitées — et les en-têtes d’objets sont passés de 96 à 64 bits, réduisant d’un tiers la surcharge pour toute application créant un nombre significatif d’objets.

Le collecteur Serial était le plus ancien GC de Java : simple, prévisible et brutal. Quand il s’exécutait, il gelait l’intégralité de l’application jusqu’à ce que le tas soit nettoyé. Sur les serveurs à grande mémoire et multi-CPU, ce compromis est devenu intenable il y a des années — G1 a remplacé Serial comme défaut pour les serveurs à partir de Java 9. Les environnements contraints ont continué à utiliser Serial jusqu’à Java 26 : machines mono-processeur, petites VMs cloud, systèmes embarqués à faible mémoire. Cette valeur par défaut prend fin avec Java 27.

G1 divise le tas en petites régions et les collecte de manière incrémentale, en priorisant les sections contenant le plus de déchets en premier — d’où le nom Garbage-First. Les pauses existent toujours, mais elles sont plus courtes et plus prévisibles qu’une collecte complète de Serial. Oracle indique que G1 est désormais compétitif avec Serial pour toutes les tailles de tas. Pour les développeurs qui déploient des applications sur les instances cloud les moins chères — un CPU, un gigaoctet de RAM — Java 27 supprime un frottement qu’ils subissaient depuis des années.

Le changement des en-têtes d’objets compacts constitue l’autre moitié de cette version. Les objets Java portent des métadonnées — informations de type, codes de hachage, état de verrouillage — stockées dans un en-tête attaché à chaque objet. L’ancien format utilisait 96 bits. Java 27 le compresse à 64 bits, soit une réduction de 33 % par objet. Pour les applications qui créent des millions d’objets — files d’attente de messages, registres financiers, microservices événementiels — l’effet cumulatif est mesurable : tas plus dense, meilleure utilisation du cache CPU, moins de cycles de collecte nécessaires.

Les deux changements comportent des réserves. Les applications optimisées explicitement pour le comportement du GC Serial peuvent voir des différences de timing inattendues après la mise à niveau. G1 utilise plus de mémoire pour la comptabilité que Serial, ce qui importe dans les environnements avec des budgets mémoire vraiment serrés — bien que les tests d’Oracle indiquent que le compromis de débit est négligeable pour la plupart des charges de travail. Les équipes de développement déployant Java 27 sur des systèmes contraints devraient tester les nouvelles valeurs par défaut avant de livrer. La transition est automatique, mais elle n’est pas invisible.

Java 27 ajoute également un échange de clés hybride post-quantique pour TLS 1.3, implémentant l’algorithme ML-KEM aux côtés de l’échange à courbe elliptique X25519 existant. Les connexions TLS négociées aujourd’hui pourraient, en théorie, être capturées et déchiffrées plus tard par un futur ordinateur quantique. L’échange de clés hybride défend contre cela en exigeant qu’un attaquant casse simultanément un algorithme classique et un algorithme post-quantique — un ajout significatif pour tout service Java manipulant des données sensibles.

Java 27 a été publié le 15 septembre 2026, suivant le cycle de six mois de la plateforme. La concurrence structurée et les constantes paresseuses restent des fonctionnalités en aperçu dans cette version. La prochaine version de support à long terme de la série Java est attendue en 2027.

Étiquettes: , , , , ,

Ajoutez-nous sur Google

Discussion

Il y a 0 commentaire.