7 points par GN⁺ 2025-03-19 | 4 commentaires | Partager sur WhatsApp
  • Oracle a officiellement annoncé la sortie de Java 24 (JDK 24)
  • JDK 24 est l’implémentation de référence de la version 24 de la Java SE Platform, telle que définie par le JSR 399 du JCP, et a été publié via le processus de publication du JDK (JEP 3)

[Résumé par JEP]

  • JEP 404: Generational Shenandoah (expérimental)

    • Prise en charge de la collecte générationnelle dans le GC Shenandoah afin d’améliorer les performances
  • JEP 450: Compact Object Headers (expérimental)

    • Réduction de la taille des en-têtes d’objet dans la JVM HotSpot de 96~128 bits à 64 bits
    • Réduction attendue de la taille du heap, amélioration de la densité de déploiement et de la localité des données
  • JEP 472: Prepare to Restrict the Use of JNI

    • Ajout d’avertissements lors de l’utilisation de JNI (Java Native Interface)
    • Fournit des avertissements cohérents dans l’API Foreign Function & Memory (FFM)
    • Ces avertissements préparent à de futures restrictions sur l’usage de JNI et de l’API FFM
    • L’interface peut être activée de manière sélective si nécessaire dans les applications
  • JEP 475: Late Barrier Expansion for G1

    • Simplification de l’implémentation des barriers dans le garbage collector G1
    • Ajustement du moment d’expansion des barriers des premières vers les dernières phases du compilateur JIT C2
  • JEP 478: Key Derivation Function API (preview)

    • Introduction d’une API Key Derivation Function (KDF) pour les fonctions de dérivation de clés cryptographiques
    • Permet de dériver des clés supplémentaires à partir de clés secrètes et d’autres données
  • JEP 483: Ahead-of-Time Class Loading & Linking

    • Rend les classes applicatives immédiatement disponibles au démarrage de la JVM HotSpot
    • L’état chargé et lié d’une exécution peut être mis en cache pour accélérer les démarrages suivants
  • JEP 484: Class-File API

    • Fournit une API standard pour l’analyse, la génération et la transformation des fichiers de classe Java
  • JEP 485: Stream Gatherers

    • Ajout de la prise en charge d’opérations intermédiaires personnalisées dans la Stream API
    • Permet des transformations de données difficiles à réaliser avec les opérations intermédiaires existantes
  • JEP 486: Permanently Disable the Security Manager

    • Le gestionnaire de sécurité n’était plus le principal mécanisme de sécurité pour le code côté client
    • Désactivation engagée après sa dépréciation pour suppression dans Java 17 (JEP 411)
    • L’API du Security Manager sera complètement supprimée dans une future version
  • JEP 487: Scoped Values (quatrième preview)

    • Introduction des Scoped Values pour partager des données immuables avec des threads enfants au sein d’un thread
    • Peut réduire les coûts en mémoire et en temps par rapport aux variables locales de thread
    • Des gains de performances sont attendus avec les threads virtuels et la concurrence structurée
  • JEP 488: Primitive Types in Patterns, instanceof, and switch (deuxième preview)

    • Prise en charge des types primitifs dans le pattern matching
    • Tous les types primitifs peuvent être utilisés dans instanceof et switch
  • JEP 489: Vector API (neuvième incubateur)

    • Introduction d’une API pour les opérations vectorielles
    • Compilation vers des instructions vectorielles, avec des performances attendues supérieures aux opérations scalaires
  • JEP 490: ZGC: Remove the Non-Generational Mode

    • Suppression du mode non générationnel de ZGC et définition du mode générationnel comme valeur par défaut
  • JEP 491: Synchronize Virtual Threads without Pinning

    • Amélioration du comportement des threads virtuels dans les blocs synchronized afin qu’ils libèrent les threads de plateforme
    • Évite d’épingler les threads virtuels aux threads de plateforme, ce qui améliore performances et scalabilité
  • JEP 492: Flexible Constructor Bodies (troisième preview)

    • Autorise des instructions avant l’appel explicite du constructeur (super(..), this(..))
    • Permet d’initialiser des champs avant l’initialisation complète de l’instance
  • JEP 494: Module Import Declarations (deuxième preview)

    • Ajout de déclarations permettant d’importer simplement des packages exportés par un module
    • Simplifie la réutilisation des bibliothèques modularisées
  • JEP 495: Simple Source Files and Instance Main Methods (quatrième preview)

    • Prise en charge de fichiers source simples et de méthodes facilitant l’écriture pour les débutants
    • Permet d’écrire des programmes simples sans code complexe
  • JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism

    • Introduction du Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) résistant au quantique
    • Renforce la sécurité des clés symétriques et prépare aux attaques liées à l’informatique quantique
  • JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm

    • Introduction du Module-Lattice-Based Digital Signature Algorithm (ML-DSA) résistant au quantique
    • Renforce la protection contre l’altération des données et l’authentification du signataire
    • Prépare aux futures attaques liées à l’informatique quantique
  • JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe

    • Affiche des avertissements lors de l’utilisation des méthodes d’accès mémoire de sun.misc.Unsafe
    • Migration recommandée vers l’API VarHandle et l’API FFM
  • JEP 499: Structured Concurrency (quatrième preview)

    • Introduction de la concurrence structurée pour traiter des groupes de tâches liées comme une seule unité de travail
    • Simplifie la gestion des erreurs et l’annulation, et améliore fiabilité et visibilité

[Résumé des nouveautés de JDK 24]

  • Configurable New Session Tickets Count for TLSv1.3

    • Ajout de la nouvelle propriété système jdk.tls.server.newSessionTicket
    • Permet de configurer le nombre de tickets de reprise TLSv1.3 sur les serveurs JSSE (plage 0~10)
    • La valeur par défaut est 1
    • Exemple de commande :
      java -Djdk.tls.server.newSessionTicket=2  
      
  • Mechanism to Disable TLS Cipher Suites by Pattern Matching

    • Dans le fichier de configuration java.security, la propriété jdk.tls.disabledAlgorithms permet de désactiver des suites de chiffrement TLS
    • Prise en charge du pattern matching (wildcard _ pris en charge)
    • Exemple : "TLS_RSA_*" désactive toutes les suites de chiffrement commençant par TLS_RSA
  • New Option to Extract a JAR File to a Specific Directory Using the jar Tool

    • Ajout des nouvelles options --dir et -C à l’outil jar
    • Permet d’extraire le contenu d’un fichier JAR dans un répertoire spécifique
    • Exemples :
      jar -xf foo.jar -C /tmp/bar/  
      jar --extract --file foo.jar --dir /tmp/bar/  
      
  • New Reader.of(CharSequence) Method

    • Ajout de la nouvelle méthode factory statique java.io.Reader.of(CharSequence)
    • Permet une lecture efficace depuis String, StringBuilder, etc.
  • New Method Process.waitFor(Duration)

    • Ajout de la méthode java.lang.Process#waitFor(Duration)
    • Évite la confusion sur le choix de l’unité dans l’ancienne méthode waitFor()
  • Support for Unicode 16.0

    • Ajout de la prise en charge d’Unicode 16.0
    • Au total, 154,998 caractères et 7 nouvelles écritures ajoutés
      • Garay (Afrique de l’Ouest)
      • Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (Inde et Népal)
      • Todhri (Albanie)
      • Tulu-Tigalari (sud-ouest de l’Inde)
  • New JAR Command Option to Not Overwrite Existing Files

    • Ajout des options --keep-old-files et -k à l’outil jar
    • Permet d’éviter l’écrasement de fichiers existants
    • Exemples :
      jar xkf foo.jar  
      jar --extract --keep-old-files --file foo.jar  
      
  • New MXBean to Monitor and Manage Virtual Thread Scheduler

    • Ajout de l’interface jdk.management.VirtualThreadSchedulerMXBean
    • Permet de surveiller l’état et le parallélisme du scheduler des threads virtuels
    • Permet de modifier dynamiquement le parallélisme cible du scheduler
  • New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers

    • Ajout de nouvelles commandes à l’outil jcmd
      • Thread.vthread_scheduler : affiche l’état du scheduler de threads
      • Thread.vthread_pollers : affiche l’état des pollers d’E/S
  • Support for Including Security Properties Files

    • Le fichier de configuration java.security peut désormais inclure d’autres fichiers de propriétés
    • Utilisation de include <chemin du fichier>
    • Le mot-clé include ne peut pas être utilisé comme nom de propriété
  • Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature

    • Documentation des algorithmes standard de hachage et de fonction de génération de masque utilisables avec la signature RSASSA-PSS
  • SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism

    • Le provider SunPKCS11 ajoute la prise en charge de la transformation AES/CTS
    • Ajout de la nouvelle propriété de configuration cipherTextStealingVariant (CS1, CS2, CS3)
    • Pour NSS, la valeur par défaut est CS1
  • New Summary Page for External Specifications

    • Ajout d’une page de synthèse permettant de voir d’un coup d’œil les spécifications externes référencées par Java SE et l’API JDK
  • jpackage Supports WiX Toolset v4 and v5 on Windows

    • jpackage ajoute la prise en charge de WiX Toolset v4 et v5
    • Sélection automatique de la version d’installation la plus récente
    • Conversion automatique vers le format v4 des sources personnalisées au format WiX v3
  • Add W3C DTDs and XSDs to the JDK Built-in Catalog

    • Ajout des DTD et XSD du W3C au catalogue XML intégré du JDK
    • Chargement local possible sans réseau
    • Éléments ajoutés :
      • espace de noms xml
      • XML Schema Part 1 & 2
      • XHTML 1.0 & 1.1
      • DTD de la spécification XML du W3C

4 commentaires

 
clickin 2025-03-20

Project Valhalla est en développement depuis vraiment très longtemps, donc j’espère qu’il aboutira à de bons résultats.
Personnellement, j’attends surtout de la structure plate des value classes qu’elle réduise les références par pointeur et apporte ainsi un vrai gain en vitesse d’accès mémoire.

 
tsboard 2025-03-20

On voit clairement qu’il bénéficie beaucoup des influences (positives) de Kotlin. En ce moment, j’utilise Kotlin et j’en suis vraiment très satisfait, mais je soutiens aussi Java, qu’on peut considérer comme la source originelle.

 
carnoxen 2025-03-19

J’attends énormément Structured Concurrency et Scoped Value.

 
GN⁺ 2025-03-19
Avis Hacker News
  • Le SecurityManager disparaît discrètement. Un professeur qui enseignait autrefois un module optionnel Java soulignait souvent les avantages du SecurityManager. J’étais très sceptique à l’époque, et je suis satisfait de voir que ce scepticisme était justifié

  • J’aimerais en finir avec la préversion de la concurrence structurée. Cela aide Java à combler son dernier écart face à golang en matière de facilité de programmation concurrente. Go permet de créer facilement des channels et des wait groups. La concurrence structurée permet d’utiliser ces éléments de base pour écrire et comprendre plus facilement des tâches de plus haut niveau

  • L’absence de pinning des threads virtuels est un énorme avantage. On peut désormais utiliser les threads virtuels presque sans restriction

  • C’est agréable de voir que les Streams restent appréciés. Dans l’entreprise, nous faisons beaucoup d’entretiens de type fizzbuzz, et les personnes qui choisissent Java et utilisent les streams réussissent généralement. Cela montre l’ergonomie et l’intuitivité du langage, ainsi que la puissance de l’abstraction. Les streams Java sont aussi puissants que les chaînes d’opérations de style fonctionnel de Ruby, tout en offrant de très bonnes performances en pratique

  • Nouvelles fonctionnalités : lien du projet OpenJDK 24

  • Les versions ARM32 et Risc-V seront bientôt disponibles ici

  • Le Raspberry 2 et le Vision Five 2 sont des matériels très tournés vers l’avenir qu’Oracle et OpenJDK ignorent

  • Question sur les différences de licence entre l’utilisation d’OpenJDK et celle des versions officielles d’Oracle JDK

  • Il est surprenant que le JEP 491 n’ait pas encore été mentionné. Il garantit que le mot-clé "synchronized" ne casse pas les threads virtuels. C’est un gros avantage pour exécuter du code existant sur des threads virtuels

  • L’évolution des versions de Java a été intéressante ces dernières années. Après Java 9, 10, 11 LTS, j’utilise encore Java 8. Il y a trop de travail à faire

  • Quand on compare les dernières versions de Java et Kotlin, Java continue de s’améliorer et d’intégrer des fonctionnalités de Kotlin, mais Kotlin continue lui aussi à progresser de son côté

  • GraalVM est également disponible pour Java 24. Il y a beaucoup de bonnes fonctionnalités

  • Le pinning des threads virtuels a enfin disparu