Die Java Virtual Machine (JVM) ist der Kern des Java-Ökosystems und stellt alle wesentlichen Tools zum Ausführen von Java-Code bereit. Um seine Funktionsweise vollständig zu verstehen, ist es wichtig, den Lebenszyklus dieses Interpreters und seine Auswirkungen auf die Leistung und Optimierung von Java-Anwendungen zu verstehen.
Der gesamte JVM-Lebenszyklus beginnt mit einem grundlegenden Prozess namens „JVM Bootstrapping“, der für den Aufbau und die Vorbereitung der gesamten Ausführungsumgebung verantwortlich ist. In diesem Zusammenhang werden die auf der Befehlszeile übergebenen Argumente interpretiert, der JVM-Code im Speicher zugewiesen, die internen Datenstrukturen der JVM initialisiert, die Speicherverwaltung beginnt und schließlich der Hauptanwendungsthread in Betrieb genommen. Lassen Sie uns jeden in diesem Absatz beschriebenen Unterprozess einzeln untersuchen:
In der Befehlszeile übergebene Argumente werden interpretiert
Wenn das Programm über die Befehlszeile gestartet wird, startet die JVM eine Prozesskette, die für die Analyse der bereitgestellten Argumente verantwortlich ist, die Initialisierungsparameter umfassen können – wie zum Beispiel: -Xms und -Xmx, um die minimale Größe und den maximalen Heap zu definieren, der Speicherbereich, der für die Zuweisung und Erstellung von Objekten im Kontext der Anwendung verantwortlich ist – Debug-Spezifikationen oder Konfigurationen sogar des Garbage Collector-Zyklus selbst.
Bevor wir fortfahren, ist es wichtig zu erwähnen: Der Einfachheit halber analysieren wir den Codeabschnitt, der sich mit dem Parsen erweiterter JVM-Argumente befasst – diejenigen, die mit -XX beginnen.
Um mehr Klarheit zu schaffen, werden wir für weitere Referenzen den Open-Source-Code von OpenJDK verwenden. In der Datei arguments.cpp im Verzeichnis src/hotspot/share/runtime.arguments.cpp lautet die Funktion, die erweiterte Parameter (-XX) durch die CLI interpretiert:
In einer kurzen Analyse startet die Funktion eine Prüfung, um zu sehen, ob das übergebene Argument mit oder - beginnt. Dabei wird ermittelt, ob das Flag boolesch ist und ob es deaktiviert oder aktiviert werden sollte.
Danach beginnt der Code mit dem Extrahieren des Flag-Namens. Jedes Zeichen wird analysiert. Wenn es nicht alphanumerisch oder nicht _ ist, endet es (was bedeutet, dass der Flag-Name vollständig ist).
Nachdem die Prüfungen durchgeführt und der Flag-Name identifiziert wurden, wird schließlich die Methode JVMFlag* flag = find_jvm_flag(name, name_len); aufgerufen, um zu sehen, ob für das, was bereitgestellt wurde, eine Konfiguration verfügbar ist.
Dies ist eine kleine Zusammenfassung, wie die fortschrittlichsten Argumente von -XX analysiert werden. Es ist jedoch möglich, in derselben Datei, die ich erwähnen werde, die Argumentprozesse zu finden, die mit -X beginnen und eine andere Parsing-Funktion durchlaufen:
Beispiel für das Flag: -XMS
ARTIKEL IM BAU
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3