Wie führt die Java Virtual Machine Java-Bytecode aus?
Aus Sicht der virtuellen Maschine erfordert die Ausführung von Java-Code zunächst das Laden der kompilierten Klassendatei in die virtuelle Java-Maschine. Die geladene Java-Klasse wird im Methodenbereich gespeichert. Bei der tatsächlichen Ausführung führt die virtuelle Maschine den Code im Methodenbereich aus. (Empfohlenes Lernen: Java-Kurs)
Während des laufenden Prozesses, wann immer eine Java-Methode aufgerufen wird, die Java Virtual Machine Generieren Sie einen Stapelrahmen im Java-Methodenstapel des aktuellen Threads, um lokale Variablen und Bytecode-Operanden zu speichern. Die Größe dieses Stapelrahmens wird im Voraus berechnet, und die Java Virtual Machine erfordert keine kontinuierliche Verteilung der Stapelrahmen im Speicherraum.
In Hotspot hat der obige Übersetzungsprozess zwei Formen: Die erste ist Interpretation und Ausführung, dh die Übersetzung des Bytecodes nacheinander in Maschinencode und die Ausführung ; Die zweite Methode ist die Just-in-Time-Kompilierung (JIT), die den gesamten in einer Methode enthaltenen Bytecode vor der Ausführung in Maschinencode kompiliert.
Der Vorteil des ersteren besteht darin, dass nicht auf die Kompilierung gewartet werden muss, während der Vorteil des letzteren darin besteht, dass er tatsächlich schneller ausgeführt wird. HotSpot verwendet standardmäßig den Hybridmodus, der die Vorteile der interpretierten Ausführung und der Just-in-Time-Kompilierung vereint. Er interpretiert und führt zunächst den Bytecode aus und kompiliert dann die Hotspot-Codes, die im laufenden Betrieb wiederholt in Methodeneinheiten ausgeführt werden.
Wie effizient ist die Java Virtual Machine?
Just-in-Time-Kompilierung basiert auf der Annahme, dass das Programm der 80/20-Regel entspricht, d. h. 20 % des Codes belegen 80 % der Rechenressourcen.
Für den selten verwendeten Code, der den Großteil einnimmt, müssen wir keine Zeit damit verbringen, ihn in Maschinencode zu kompilieren, sondern müssen ihn andererseits interpretieren und ausführen, für den Hot-Code, der nur einen Platz einnimmt kleiner TeilWir können es in Maschinencode kompilieren, um die gewünschte Laufgeschwindigkeit zu erreichen.
Theoretisch kann die Ausführungseffizienz eines JIT-kompilierten Java-Programms die von C++ übertreffen. Dies liegt daran, dass die Just-in-Time-Kompilierung im Vergleich zur statischen Kompilierung über die Laufzeitinformationen des Programms verfügt und auf der Grundlage dieser Informationen entsprechende Optimierungen vornehmen kann.
Zum Beispiel: Bei einem virtuellen Methodenaufruf gibt es zwar viele Zielmethoden, es kann jedoch sein, dass während des tatsächlichen Betriebs nur eine davon aufgerufen wird. Diese Informationen können vom Just-in-Time-Compiler ausgenutzt werden, um den Overhead virtueller Methodenaufrufe zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie läuft Java-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!