La machine virtuelle Java (JVM) est au cœur de l'écosystème Java, fournissant tous les outils essentiels à l'exécution du code Java. Pour bien comprendre son fonctionnement, il est crucial de comprendre le cycle de vie de cet interpréteur et ses implications pour les performances et l'optimisation des applications Java.
L'ensemble du cycle de vie de la JVM commence par un processus fondamental appelé "JVM Bootstrapping" qui est responsable de la construction de l'ensemble de l'environnement d'exécution et de sa préparation. C'est dans ce contexte que : les arguments passés sur la ligne de commande sont interprétés, le code JVM est alloué en mémoire, les structures de données internes de la JVM sont initialisées, la gestion de la mémoire commence, et enfin le thread principal de l'application passe à fonctionner. Explorons chaque sous-processus décrit dans ce paragraphe individuellement :
Les arguments passés sur la ligne de commande sont interprétés
Lorsque le programme est démarré via la ligne de commande, la JVM démarre une chaîne de processus chargés d'analyser les arguments fournis, qui peuvent inclure des paramètres d'initialisation — tels que : -Xms et -Xmx pour définir la taille minimale et le tas maximum, la zone de mémoire responsable de l'allocation et de la création d'objets dans le contexte de l'application - spécifications de débogage ou configurations même du cycle Garbage Collector lui-même.
Avant de continuer, il est important de mentionner : par souci de simplicité, nous analyserons le segment de code qui traite de l'analyse des arguments JVM avancés - ceux qui commencent par -XX.
Pour avoir plus de clarté, nous utiliserons le code open source d'OpenJDK pour des références supplémentaires. Dans le fichier arguments.cpp situé dans le répertoire src/hotspot/share/runtime.arguments.cpp la fonction qui interprète les paramètres avancés (-XX) par la CLI est la suivante :
En effectuant une brève analyse, la fonction démarre une vérification pour voir si l'argument passé commence par ou -, déterminant si l'indicateur est booléen, et également s'il doit être désactivé ou activé.
Après cela, le code commence à extraire le nom du drapeau. Chaque caractère est analysé, s'il n'est pas alphanumérique ou non _, il se termine (c'est à dire que le nom du drapeau est complet).
Après avoir effectué les vérifications et identifié le nom de l'indicateur, la méthode JVMFlag* flag = find_jvm_flag(name, name_len); est finalement invoquée pour voir s'il existe une configuration disponible pour ce qui a été fourni.
Ceci est un petit résumé de la façon dont les arguments les plus avancés de -XX sont analysés. Il est possible de retrouver cependant dans ce même fichier que je citerai, les traitements d'arguments qui commencent par -X qui passent par une autre fonction d'analyse :
Exemple de flag : -XMS
ARTICLE EN CONSTRUCTION
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3