Ich arbeitete bereits mit -XX:+PrintCompilation
, und ich kenne die grundlegenden Techniken des JIT-Compilers und warum JIT-Kompilierung verwendet wird.Wie entscheidet sich die JVM, eine Methode JIT-kompilieren (kategorisieren Sie eine Methode als "hot")?
Noch habe ich noch nicht herausgefunden, wie die JVM entscheidet, eine Methode JIT-compile, d. H. "Wann der richtige Zeitpunkt gekommen ist, um eine Methode JIT kompilieren".
Bin ich richtig in der Annahme, dass jede Methode interpretiert wird, und solange es nicht als "heiße Methode" kategorisiert wird, wird es nicht kompiliert werden? Ich habe etwas in meinem Hinterkopf, dass ich gelesen habe, dass eine Methode als "heiß" angesehen wird, wenn sie mindestens 10.000 Mal ausgeführt wurde (nach der 10.000-fachen Interpretation der Methode wird sie kompiliert), aber ich muss zugeben, dass ich es bin bin mir nicht sicher oder woher ich das gelesen habe.
Also meine Frage zusammenzufassen:
(1) Ist jede Methode interpretiert, solange es wurde als „hot“ Methode nicht kategorisiert (und damit kompiliert wurde) oder gibt es Gründe für Methoden um kompiliert zu werden, auch wenn sie nicht "heiß" sind?
(2) Wie kategorisiert die JVM Methoden in "nicht heiße" und "heiße" Methoden? Anzahl der Ausführung? Noch etwas?
(3) Wenn es für "hot" -Methoden bestimmte Schwellenwerte gibt (wie die Anzahl der Ausführungen), gibt es Java-Flags (-XX:...
), um diese Schwellenwerte zu setzen?
Werfen Sie einen Blick auf die Ausgabe von '-XX: + PrintFlagsFinal', gibt es viele Fahnen an den JIT-Compiler beziehen und ihre Reihen, inlining, Methoden Größen Compiler Fäden usw. – the8472