Dans un précédent article nous passions en revue les dernières évolutions d’OracleJDK et introduisions l’alternative OpenJDK, devenue une implémentation de référence officielle de Java Standard Edition. Parlons aujourd’hui de ses modes de distribution et de ses performances.

La plupart des distributions d’OpenJDK sont écrites au-dessus d’OpenJDK (le projet) en apportant quelques modifications aux composants (principalement pour remplacer les parties propriétaires sous licence / remplacer par des éléments plus performants qui ne fonctionnent que sur un système d’exploitation spécifique) sans rompre la compatibilité TCK. 

Revue des distributions d’OpenJDK

  • AdoptOpenJDK (Adoptium) : AdoptOpenJDK est une communauté de membres du groupe d’utilisateurs Java (JUG), de développeurs et de fournisseurs Java (notamment Azul, Amazon, GoDaddy, IBM, jClarity, Microsoft, Pivotal et Red Hat) qui défendent OpenJDK. AdoptOpenJDK fournit des distributions binaires OpenJD (HotSpot et Eclipse OpenJ9) pour une très large gamme de plates-formes (Linux, Mac, Windows 32/64, Arm 32/64, Solaris, AIX, PPC, s390 et plus). AdoptOpenJDK n’offre pas de support payant. Il fournit simplement des fichiers binaires testés.
  • Amazon Corretto : Amazon web Services (AWS) est également engagé dans OpenJDK. Depuis fin 2018, il a lancé Amazon Corretto, sa distribution basée sur OpenJDK 8, avec prise en charge à long terme au moins jusqu’en mai 2026. L’engagement d’Amazon en faveur d’OpenJDK et de le maintenir libre pour la popularité de Java parmi les développeurs AWS. Amazon Corretto, qui correspond à OpenJDK 8, fournit plus de quatre ans de support à long terme, au-delà de ce qu’Oracle propose actuellement pour la distribution de OpenJDK 8. Cela garantit que le support OpenJDK restera gratuit au moins aussi longtemps. En d’autres termes, Amazon Corretto est une diffusion sans coût, multi-plate-forme et prête pour la production du kit de développement OpenJDK. Corretto est fourni avec une prise en charge longue durée qui inclut des améliorations de performances et des correctifs de sécurité. Corretto est certifié compatible avec la norme Java SE. Grâce à Corretto, vous pouvez développer et exécuter des applications Java sur plusieurs des systèmes d’exploitation les plus courants, notamment Linux, Windows et Mac OS.
  • Azul Zulu : Azul fournit des fichiers binaires OpenJDK (Zulu) ainsi qu’une plate-forme Java spécialisée (Zing). Azul offre une option à toutes les entreprises qui ne souhaitent pas ignorer toutes les versions de Java SE entre les versions de LTS, mais ne peuvent pas passer à la version la plus récente tous les 6 mois. Ensuite, pour le support de toutes les versions de LTS, où Azul fournit une année de support supplémentaire par rapport à Oracle, Azul prend en charge les versions dites de support à moyen terme (MTS) pour leur JDK Zulu. Ici, vous pouvez acheter un support commercial pour chaque seconde version de Java SE, qu’il s’agisse ou non de LTS. La durée de support de ces versions est différente. Azul essaie de fournir une bonne plage de temps pour préparer une migration vers la prochaine version et définit 3 durées différentes pour la prise en charge des versions de Java SE. L’assistance commerciale de Zulu n’est pas définie par processeur comme c’est le cas chez Oracle, mais en fonction du nombre de systèmes. Un système est défini comme un serveur physique ou virtuel. La seule différence entre le support standard et premium est la disponibilité du support. En achetant une assistance premium, vous pouvez appeler Azul 24×7.
  • BellSoft Liberica : Liberica est une implémentation Java 100% open source. Elle est construite à partir d’OpenJDK, auquel BellSoft contribue, est testée de manière approfondie et a passé le JCK fourni sous la licence d’OpenJDK. Toutes les versions supportées de Liberica contiennent également JavaFX 12.
  • IBM SDK Java : IBM fournit des kits JDK natifs pour AIX, Linux (sur x86, Power, zSystems), z/OS et IBM i. IBM propose les versions d’IBM SDK Java SE à utiliser avec les produits ou plates-formes IBM et à l’usage des développeurs de developerWorks (un centre de ressources techniques d’IBM). IBM fournit également des fichiers binaires OpenJDK (avec Eclipse OpenJ9) construits et testés sur AdoptOpenJDK. Pour Java SE 7 et 8, IBM fournit toujours des mises à jour de sécurité et des corrections de bugs. Le cycle de vie du support IBM continuera d’être mis à jour. Sur la base du nouveau calendrier de publication de Java SE, IBM a annoncé que les versions non-LTS seraient disponibles en tant que fichiers OpenJDK avec OpenJ9 d’AdoptOpenJDK.
  • Red Hat OpenJDK : La version OpenJDK de Red Hat est une implémentation libre et open source de la plate-forme Java Standard Edition (Java SE). Oracle JDK et OpenJDK sont fonctionnellement très similaires, mais présentent des différences majeures en termes de support. La version OpenJDK de Red Hat, a décrit l’entreprise, est une excellente alternative et une implémentation multi-plate-forme. Red Hat OpenJDK est pris en charge sous Windows et RHEL (Red Hat Enterprise Linux), ce qui vous permet de normaliser sur une seule plate-forme Java sur un cloud hybride, de centre de données et de bureau. Pour les versions LTS, Red Hat prend en charge OpenJDK 11, ainsi que OpenJDK 7 et 8.
  • SapMachine : enfin, il serait bien de notifier que SAP a également créé et maintient le projet SapMachine, une version en aval du projet OpenJDK. Il est utilisé pour créer et gérer une version OpenJDK prise en charge par SAP pour les clients et partenaires SAP souhaitant utiliser OpenJDK pour exécuter leurs applications.
3-image-article-jdk
Tableau comparatif des différentes distributions de l’OpenJDK source : magazine programmez hors série 4

 

Compilation depuis le code sources : le code source de la distribution est disponible publiquement et chacun peut assembler sa propre construction.

Distributions gratuites : les binaires de la distribution sont publiquement disponibles pour le téléchargement et l’utilisation.

Mises à jour étendues : alias LTS – Mises à jour publiques au-delà du cycle de vie de 6 mois de la version.

Support commercial : certains fournisseurs proposent des mises à jour étendues et un support client aux clients payants, par exemple Oracle JDK (détails du support).

Licence permissive : la licence de distribution est non protectrice, par exemple Apache 2.0.

4-image-article-jdk
Tableau comparatif de l’extension du support et mises à jour des distributions OpenJDK source : magazine programmez hors série 4 * Majeure = Linux x86, macOS, Windows x64 / Mineure = autres plates-formes

 

Voici un organigramme pour nous guider dans le choix d’un fournisseur par type de support et licence : Figure 3

5-image-article-jdk
Figure 3 : Organigramme de choix d’un fournisseur par type de support et licence
source : magazine programmez hors série 4

 

Performances :

Les performances sont un facteur important. Nous réaliserons des tests de performance d’une application Java (une application Springboot) dans un environnement conteneurisé avec différentes installations de JDK 11 :

  • OracleJDK
  • AdoptopJDK (openJDK / openJ9)
  • Azul Zulu
  • Amazon Corretto

Ces tests vont permettre de comparer les performances selon les indicateurs suivants :

  • Utilisation du CPU
  • Utilisation de la mémoire JVM et Processus
  • Threads
  • Temps de réponse

Configuration et Installation :

  • Monitoring : Prometheus et Grafana
  • Spécifications : Conteneur docker Linux avec 1 CPU et 1024 Mo de mémoire.
  • Docker-compose :
7-image-article-jdk
source : magazine programmez hors série 4

6-image-article-jdk

 

Image docker : 

8-image-article-jdk
Exemple de DockerFile pour une image de base AWS Corretto
source : magazine programmez hors série 4

 

Pour chaque distribution on crée une image docker :

9-image-article-jdk
source : magazine programmez hors série 4

 

  • Application Java Reactive (Spring WebFlux)
10-image-article-jdk
Figure 4 : Diagramme de séquence de la consommation de la ressource “/contact
source : magazine programmez hors série 4

 

L’application java expose une API Restful :

/hello : retourne un texte « Greeting from Creative Technology”

/contacts : retourne un objet JSON qui enveloppe une liste de contacts

Elle expose d’autres ressources :

/actuator/prometheus : metrics

/actuator/health : état de santé de l’application

/actuator/info : des informations concernant l’application

comme sa version, la version et la distribution de JDK

Nous allons effectuer des tests de performance sur la ressource “/contacts”. En consommant cette ressource, nous allons charger la liste des contacts depuis un fichier XML et le transformer en liste d’objets java (avec du JAXB) que par la suite nous allons mapper avec une liste des objets java à retourner (avec du Dozer). 

11-image-article-jdk
Figure 5 : Script de test source : magazine programmez hors série 4
Figure 6 : Les tests lancés avec Postman Runner
source : magazine programmez hors série 4

 

  • Configuration du test de performance :

Nous allons effectuer les tests sur Postman, tout d’abord il faut créer une “Collection” et créer dedans des requêtes. Chaque requête correspond à une requête “Get” par environnement (distribution de JDK). Le script de test va vérifier le statut HTTP retourné (qui doit être 200 : succès) et que la réponse contient bien une réponse JSON qui contient cinq objets structurés.
Le test sera lancé par un Runner qui va réaliser 10 000 itérations avec un délai de 100 ms entre chaque appel. Figures 5 et 6

Résultat :

Nous allons utiliser Grafana et Prometheus pour visualiser les résultats du test de charge réalisé à l’aide de Postman sur l’application Java réactive s’exécutant sur les cinq JDK choisis.

  • AdoptOpenJDK :

Ressources : CPU, Mémoire, Threads

12-image-article-jdk

Temps de réponse
13-image-article-jdk

  • Amazon Correto
    Ressources : CPU, Mémoire, Threads

14-image-article-jdk

Temps de réponse 

15-image-article-jdk

  • AdopteOpenJDK OpenJ9
    Ressources : CPU, Mémoire, Threads

16-image-article-jdk

Temps de réponse 

17-image-article-jdk

  • Oracle OpenJDK
    Ressources : CPU, Mémoire, Threads

18-image-article-jdk
Temps de réponse 

19-image-article-jdk

  • Azul Zulu
    Ressources : CPU, Mémoire, Threads

20-image-article-jdk

Temps de réponse

21-image-article-jdk