JIT- oder AOT-Compiler gezielt inaktivieren

Wenn Ihr Java™ -Programmfehler auf ein Problem mit dem JIT-oder AOT-Compiler hinweist, können Sie versuchen, das Problem weiter einzugrenzen.

Informationen zu dieser Task

Standardmäßig optimiert der JIT-Compiler Methoden auf unterschiedlichen Optimierungsstufen. Auf verschiedene Methoden werden je nach der entsprechenden Aufrufanzahl verschiedene Optimierungsoptionen angewendet. Methoden, die häufiger aufgerufen werden, werden mit einer höheren Stufe optimiert. Indem Sie Parameter des JIT-Compilers ändern, können Sie die Optimierungsstufe der Methoden steuern. Sie können ermitteln, ob das Optimierungsprogramm fehlerhaft ist, und wenn ja, welche Optimierung problematisch ist.

Der AOT-Compiler kompiliert standardmäßig Methoden auf der Optimierungsstufe warm . Das Erzwingen des AOT-Compilers zum Kompilieren einer Methode auf einer höheren Ebene ist möglich, wird aber nicht unterstützt.

Sie geben JIT-Parameter als eine durch Kommas getrennte Liste an, die an die Option -Xjit angehängt wird. Die Syntax lautet -Xjit:< param1>,< param2>=< value>. Beispiel:
java -Xjit:verbose,optLevel=noOpt HelloWorld
Es wird das Programm HelloWorld ausgeführt, die ausführliche Ausgabe vom JIT-Compiler aktiviert und der native Code vom JIT-Compiler generiert, ohne dass Optimierungen ausgeführt werden. Optimierungsoptionen werden in -Xjitaufgelistet. Der AOT-Compiler wird auf ähnliche Weise über die Option -Xaot gesteuert. Mit der Option -Xjit werden Probleme mit dem JIT-Compiler und mit der Option -Xaot Probleme mit dem AOT-Compiler diagnostiziert.

So können Sie feststellen, wo im Compiler das Problem verursacht wird:

Vorgehensweise

  1. Setzen Sie den Parameter JIT oder AOT count=0 , um den Kompilierungsschwellenwert auf null zu ändern. Dieser Parameter bewirkt, dass jede Java-Methode kompiliert wird, bevor sie ausgeführt wird.
    Verwenden Sie count=0 nur zur Diagnose von Fehlern, wenn Sie viele weitere Methoden kompilieren, einschließlich Methoden, die nur selten verwendet werden. Die zusätzliche Kompilierung verbraucht mehr IT-Ressourcen und verlangsamt Ihre Anwendung.
    Mit count=0 schlägt Ihre Anwendung sofort fehl, wenn der Problembereich erreicht wird. In einigen Fällen kann ein Fehlschlagen mithilfe von count=1 zuverlässiger reproduziert werden.
  2. Fügen Sie disableInlining zu den JIT-oder AOT-Compilerparametern hinzu.
    Mit disableInlining wird die Generierung von umfangreicherem und komplexeren Code inaktiviert.
    Wenn das Problem nicht mehr auftritt, verwenden Sie disableInlining als Ausweichlösung, während das Java-Service-Team das Compilerproblem analysiert und behebt.
  3. Verkleinern Sie die Optimierungsstufen, indem Sie den Parameter optLevel hinzufügen, und führen Sie das Programm erneut aus, bis der Fehler nicht mehr auftritt oder Sie die Stufe noOpt erreichen. Starten Sie bei einem Problem mit dem JIT-Compiler mit der Optimierungsstufe scorching und fahren Sie anschließend mit der nächstniedrigeren Stufe usw. fort. Bei einem Problem mit dem AOT-Compiler beginnen Sie mit warm und arbeiten Sie die Liste nach unten.
    Hier die Optimierungsstufen in absteigender Reihenfolge:
    1. scorching
    2. veryHot
    3. hot
    4. warm
    5. cold
    6. noOpt

Nächste Schritte

Wenn mithilfe einer dieser Einstellungen der Fehler behoben wird, verfügen Sie über eine Fehlerumgehung, die Sie verwenden können. Diese Problemumgehung ist temporär, während das Java-Service-Team das Compilerproblem analysiert und behebt. Wenn das Entfernen von disableInlining aus der JIT- oder AOT-Parameterliste nicht dazu führt, dass das Problem erneut auftritt, sollten Sie 'disableInlining' entfernen, um die Leistung zu erhöhen. Befolgen Sie die Anweisungen unter Fehlerhaftes Verfahren suchen , um die Leistung der Problemumgehung zu verbessern.

Tritt das Problem auch bei der Optimierungsstufe noOpt auf, müssen Sie den JIT- oder AOT-Compiler inaktivieren, um den Fehler zu umgehen.