J'ai lu sur CDS dans Oracle doc https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html
Ce que j'ai compris, c'est que les fichiers de classe système nécessaires pour charger le jvm sont analysés, vérifiés puis stockés dans une archive à jre/lib/[Arch] /client/classes.jsa. De plus, ils fournissent également leur mappage de mémoire pour jvm, donc jvm mappe directement la mémoire en fonction des informations de mappage fournies dans l'archive. Cela réduit donc les frais généraux de chargement de classe chaque fois qu'une instance jvm démarre. Veuillez me corriger si je me trompais.
Venons-en maintenant à Java 10, comment puis-je y parvenir pour mon code d'application? Deuxièmement, le code d'application complet serait-il éligible pour CDS ou y a-t-il des restrictions?
Il y a trois étapes essentielles pour créer et utiliser une archive avec des données de classe d'application (pour plus de détails, lisez mon article sur le partage de données de classe d'application ):
Création d'une liste de classes à inclure dans l'archive:
Java -XX:+UseAppCDS
-XX:DumpLoadedClassList=classes.lst
-jar app.jar
Création d'une archive:
Java -XX:+UseAppCDS -Xshare:dump
-XX:SharedClassListFile=classes.lst
-XX:SharedArchiveFile=app-cds.jsa
--class-path app.jar
Utilisation de l'archive:
Java -XX:+UseAppCDS -Xshare:on
-XX:SharedArchiveFile=app-cds.jsa
-jar app.jar
Gardez à l'esprit ce qui suit:
-Xlog:class+load
( plus sur -Xlog
) pour obtenir plus d'informationsLe JEP pour AppCDS a l'exemple de casse montrant comment ajouter vos classes d'application à l'archive partagée. Quant aux restrictions, il y en a peu:
Il y a d'autres considérations pratiques à prendre en compte lors de l'utilisation de CDS/AppCDS, telles que:
Un autre article agréable et détaillé sur CDS et AppCDS est https://simonis.github.io/cl4cds/ .
L'auteur de l'article a également écrit un outil qui permet le partage des classes d'application même si elles sont chargées par un chargeur de classe personnalisé.
Si vous êtes intéressé à utiliser CDS, vous pouvez également essayer OpenJ9 JVM qui a cette fonctionnalité depuis longtemps et est beaucoup plus mature et complet. En savoir plus ici .