Même si la livraison du prochain Java Development Kit n’est pas prévue avant mars 2021, le JDK 16 commence à prendre forme, notamment en ce qui concerne l'activation des fonctionnalités du langage C++ 14 dans le code source C++ du JDK et une API vectorielle. Après la sortie du JDK 15, attendu pour le 15 septembre, le JDK 16 sera l'implémentation de référence de la version Java standard. Si le cycle de publication à six mois est respecté, on peut estimer que le JDK 16 sera prêt en mars prochain.
A la date du 2 septembre, le JDK 16 a faisait l’objet de quatre nouvelles propositions. La plus récente, l'API vectorielle, a été ajoutée la semaine du 31 août 2020.
Voici les nouvelles capacités qui feront leur apparition dans Java 16 :
- Activation des fonctionnalités du langage C++ 14 : celle-ci doit permettre l'utilisation des fonctionnalités du langage C++ 14 dans le code source C++ du JDK et fournir des indications spécifiques sur les fonctionnalités pouvant être utilisées dans le code de la VM HotSpot. Jusqu’au JDK 15, les fonctionnalités de langage utilisées par le code C++ dans le JDK ont été limitées aux normes du langage C++98/03. A partir du JDK 11, le code source a été mis à jour pour supporter des versions plus récentes du code C++ standard. Il est notamment possible de construire avec des versions récentes de compilateurs supportant les fonctionnalités du langage C++ 11/14. La présente proposition ne propose aucun changement de style ou d'usage pour le code C++ utilisé en dehors de la VM HotSpot. Mais pour tirer profit des fonctionnalités du langage C++, certaines modifications sont nécessaires en fonction du compilateur de la plate-forme.
- Une API vectorielle, en phase d'incubation, dans laquelle le JDK serait équipé d'un module d'incubation, jdk.incubator.vector, pour exprimer des calculs vectoriels qui compilent de manière optimale les instructions matérielles vectorielles sur les architectures CPU supportées, afin d'obtenir des performances supérieures à celles des calculs scalaires équivalents. L'API vectorielle apporte un mécanisme pour écrire des algorithmes vectoriels complexes en Java, en utilisant le support préexistant dans la VM HotSpot pour la vectorisation, mais avec un modèle utilisateur qui rend la vectorisation plus prévisible et plus robuste. Les objectifs de cette proposition sont notamment de fournir une API claire et concise pour exprimer une série de calculs vectoriels, d'être indépendant de la plate-forme en prenant en charge plusieurs architectures de CPU et d'offrir une compilation et des performances d'exécution fiables sur les architectures x64 et AArch64. La dégradation progressive fait aussi partie des objectifs. Elle implique qu’un calcul vectoriel pourrait se dégrader progressivement et continuer à fonctionner s'il ne peut pas être entièrement exprimé en cours d'exécution sous la forme d'une séquence d'instructions vectorielles matérielles, soit parce qu'une architecture ne prend pas en charge certaines instructions, soit parce qu'une autre architecture CPU n'est pas prise en charge.
- Migration des référentiels de code source OpenJDK de Mercurial vers Git. Cette migration présente plusieurs avantages : elle réduit la taille des métadonnées du système de contrôle de version, elle donne accès à nombre d’outils plus important et elle offre de nouvelles options d'hébergement.
- Migration vers GitHub, liée à la migration de Mercurial vers Git : les référentiels de code source du JDK 16 seront disponibles sur le site de partage de code populaire.
Les versions préliminaires du JDK 16 pour Linux, Windows et MacOS sont disponibles à l'adresse jdk.java.net. Comme le JDK 15, le JDK 16 sera une version à court terme, c’est-à-dire qu’elle prise en charge pendant six mois. Le JDK 17, prévu pour septembre 2021, sera une version de support à long terme (LTS). Elle bénéficiera d'un support pendant plusieurs années. La version LTS actuelle JDK 11, est sortie en septembre 2018.