Petit à petit, on en sait un peu plus sur JDK 19 prévu pour septembre prochain. Une fonctionnalité spécifique vient d’être proposée. Il s’agit d’une API de vectorisation pour exprimer les calculs vectoriels. Celle-ci fera l'objet d'une quatrième incubation dans la prochaine version de Java. L'autre fonctionnalité proposée est un portage du JDK sur l'architecture de jeu d'instructions (ISA) Linux/RISC-V open source.

Le JDK 19, ou simplement Java 19, pourrait comporter un grand nombre de fonctionnalités, depuis les génériques universels jusqu’aux Value Objects, selon les projets d’amélioration de Java en cours. Mais jusqu'à présent, l'API vectorielle et le portage RISC-V sont les seules fonctionnalités officiellement proposées pour le JDK 19. Selon le calendrier officiel de sortie du kit de développement publié par les membres d'OpenJDK, la version de production de Java 19 est prévue au 20 septembre. Cette version sera précédée par des phases de rampdown le 9 juin et le 21 juillet, et des versions candidates seront publiées les 11 et 25 août. Le JDK 19 prendra la suite du JDK 18 arrivé le 22 mars, une autre version de Java standard étant publiée tous les six mois.

Une API de vectorisation bien engagée

Cette API pourra exprimer des calculs vectoriels qui seront compilés de manière fiable au moment de l'exécution en instructions vectorielles optimales sur les architectures de CPU prises en charge. Grâce à cette API, les développeurs pourront écrire des algorithmes vectoriels complexes en Java, en utilisant l'auto-vectoriseur HotSpot, mais avec un modèle utilisateur qui rend les vectorisations plus prévisibles et plus robustes. L'API de vectorisation a été incubée dans les JDK 16, 17 et 19. Parmi les améliorations de l'API proposées pour l’itération 19, certaines permettent de charger et de stocker des vecteurs vers et depuis des MemorySegments, comme défini par la fonction externe Foreign Function et l'aperçu de l'API mémoire.

Le JDK 19 ajouterait également deux opérations de vectorisation dites cross-lane, de compression et d’extension, ainsi qu'une opération complémentaire de compression de masque vectoriel. L'opération de compression de vecteur fait correspondre les voies d'un vecteur source, sélectionné par un masque, à un vecteur de destination dans l'ordre des voies, tandis que l'opération d'expansion fait l'inverse. L'opération de compression est utile pour filtrer les résultats des requêtes. Dans un autre ajout à l'API vectorielle, les opérations d'intégrale par bit à l'échelle de la voie seraient étendues, y compris les opérations comme le comptage du nombre de bits 1, l'inversion de l'ordre des bits, et la compression et l'expansion des bits. Les objectifs de l'API étaient d'être claire et concise, indépendante de la plate-forme, d'avoir des performances d'exécution et de compilation fiables sur les architectures x64 et AArch64, et d’atteindre une dégradation « acceptable », pour les situations dans lesquelles un calcul vectoriel ne peut pas être entièrement exprimé à l'exécution en tant que séquence d'opérations vectorielles.

Phase finale du portage sur les architectures Linux/RISC-V

Avec le portage Linux/RISC-V, Java gagnerait la prise en charge d'un jeu d'instructions matérielles déjà supporté par de nombreuses chaînes d'outils de langage. RISC-V est en fait une famille d'ISA associée. Le portage Linux/RISC-V ne supporterait que la configuration RV64GV de RISC-V, un ISA 64 bits à usage général qui inclut des instructions vectorielles. Les développeurs de Java pourraient envisager d'autres configurations RISC-V à l'avenir. Le portage prendrait en charge les options HotSpot VM suivantes : l'interpréteur de modèle, le compilateur JIT C1 (client), le compilateur JIT C2 (serveur) et tous les ramasse-miettes actuels, y compris ZGC et Shenandoah. Le portage proprement dit est presque terminé ; l'objectif de la proposition d'amélioration du JDK (JEP) est d’intégrer le portage dans le référentiel principal du JDK.

Outre le portage RISC-V et l'API de vectorisation un aperçu de la fonction externe et de l'API mémoire, permettant aux programmes Java d'interagir avec du code et des données en dehors du runtime JVM, semble également destiné à être officiellement ciblé sur le JDK 19, puisque la proposition d'API elle-même cite le JDK 19 comme destination. Comme le JDK 18, le JDK 19 sera une version à court terme, assortie de six mois de support Premier de haut niveau seulement. La version précédente, JDK 17, était une version Long Term Support (LTS), qui offrait plusieurs années de support. Cette dernière version LTS a été livrée le 14 septembre 2021.