So prüfen Sie, ob der JIT-Compiler in Java deaktiviert ist

8

Ich würde gerne wissen, wie man überprüft, ob der JIT-Compiler ausgeschaltet ist. Ich habe den folgenden Code, der den JIT-Compiler ausschalten soll. Das Problem ist, ich bin mir nicht sicher, ob es das tatsächlich tut. Also habe ich mich gefragt, ob es eine Möglichkeit gibt zu überprüfen, ob der JIT ausgeschaltet ist. Ich schaute auf die Compiler-Klasse, aber es gibt keine Methode wie isDisabled/enabled() .

Code:

%Vor%

Jede Hilfe oder Anweisung wird sehr geschätzt.

    
isaiah 26.02.2012, 21:37
quelle

5 Antworten

10

Ich glaube nicht, dass Sie das JIT zur Laufzeit ausschalten können.

Wenn Sie ernsthaft ein Java-Programm benchmarken möchten, sollten Sie die ersten paar Läufe definitiv ignorieren. Zuverlässige Benchmarks in Java zu bekommen, ist ein extrem schwieriges Geschäft, das man den Leuten lieber klüger macht als Sie oder ich.

Ich empfehle, Caliper zu verwenden, das intern bei Google für Microbenchmarking verwendet wird, und es ist sehr schlau, das JIT und andere Sachen aufzuwärmen. Sehen Sie sich insbesondere das Beispiel hier an, das zeigt, wie Sie messen können die Effizienz eines Algorithmus für verschiedene Eingabegrößen.

    
Louis Wasserman 26.02.2012, 21:58
quelle
21

(Keine direkte Antwort auf Ihre Frage, da Sie anscheinend den JIT-Compiler programmatisch ausschalten wollten, aber basierend auf Ihrem Kommentar könnte dies von Interesse sein.)

Wenn Sie den JIT-Compiler auf einer Sun / Oracle JVM deaktivieren möchten, sollten Sie versuchen, -Xint Option :

  

-Xint

     

Im interpretierten Modus arbeiten. Die Kompilierung zu nativem Code ist deaktiviert, und alle Bytecodes werden vom Interpreter ausgeführt. Das   Leistungsvorteile, die der adaptive Java HotSpot Client VM bietet   Compiler wird in diesem Modus nicht vorhanden sein.

    
Bruno 26.02.2012 22:12
quelle
7

IBM JVMs unterstützen definitiv die Java-Schnittstelle java / lang / Compiler.disable () und .enable (), die in Java 5 eingeführt wurde, glaube ich. Dazu gehören WebSphere Real Time (eine JVM, die für eine besser vorhersagbare Leistung ausgelegt ist) sowie unsere "Standard" -JVMs. Wenn Sie disable () aufrufen, werden JIT-Zusammenstellungen verhindert, bis Sie enable () aufrufen.

Ich arbeite für IBM im JIT-Compiler-Team. Normalerweise empfehlen wir Benutzern nicht, diese Schnittstelle zu verwenden, weil eine Störung der JIT-Kompilierungsheuristik im Allgemeinen keine gute Idee ist, aber es gibt vernünftige Echtzeitszenarien, in denen Sie sie verwenden würden.

    
Mark Stoodley 07.06.2012 19:15
quelle
6

Im Artikel Leistungsmerkmale und Tools .

  

Der JIT-Compiler wurde erstmals als Performance-Update zur Verfügung gestellt   die Java Development Kit (JDK) 1.1.6 Softwareversion und ist jetzt ein   Standard-Tool wird aufgerufen, wenn Sie den Java-Interpreter-Befehl in verwenden   die Java 2-Plattform-Version.

     

Sie können den JIT-Compiler mit deaktivieren   Die Option -Djava.compiler=NONE für die Java VM.

Daraus können Sie ableiten, dass die JIT aktiviert ist, wenn die Variable nicht oder nicht auf NONE gesetzt ist.

    
Edwin Dalorzo 13.07.2012 03:44
quelle
4

Sie können Methoden ausdrucken, wenn sie kompiliert werden, mit '-XX: + PrintCompilation, wenn Ihre Methode nicht ausgedruckt wird oder nach dem Ausdruck plötzlich schneller wird, können Sie die wahrscheinliche Ursache sehen.

    
Peter Lawrey 26.02.2012 22:09
quelle

Tags und Links