2015-04-02 9 views
5

Ich möchte wissen, wie viele Anweisungen mein Java-Code zur Ausführung benötigt. Ich bin für eine api, die die Befehl Zahl und die endgültige Gesamtzahl der Anweisungen beginnen sollte am EndeGibt es eine Möglichkeit, die Anzahl der Anweisungen in Java zu zählen

Zum Beispiel zurückgegeben werden:

public static void main() 
{ 
    int a=0; 
    int b=0; 
    int c=0; 
    startCountinst(); 
    if(a==b) 
    { 
    c++; 
    } 
    int n = stopCountinst(); 
} 

Am Ende sollte n die Gesamtzahl der Anweisungen darstellen ausgeführt nach dem Aufruf startCountinst(). Ist es in Java möglich, die Anweisungen zu zählen?

+1

warum möchten Sie die Anzahl der Anweisungen zählen? – Pratik

+1

1. Wählen Sie eine Sprache. 2. Definieren Sie, auf welcher Ebene Sie die Anzahl der Anweisungen zählen möchten (Byte-Code. Assembly, Maschinenebene). 3. Die Antwort wird variieren bei * jeder Ebene * basierend auf dem Compiler, JVM, Maschinenarchitektur usw. So ist es unmöglich, eine richtige Antwort zu geben – TheLostMind

+0

Es ist in Java, also offensichtlich Byte-Code. Ist es nicht möglich, die Anweisungen zu zählen? – user3201343

Antwort

1

Ich mag die Frage. Kann zur Leistungsmessung nützlich sein. Aber nicht jede Anweisung benötigt die gleiche Zeit. Sehen Sie sich also besser Ihren Code an.

JProfiler ist sehr beliebt:

https://www.ej-technologies.com/products/jprofiler/overview.html

Und es gibt mehrere Alternativen zur Verfügung. Just Google für Java Profiler und schauen Sie. Viele Informationen verfügbar.

+0

Die Anzahl der Anweisungen ist nicht direkt im Zusammenhang mit * Leistung *. 5 Anweisungen könnten weniger Zeit als eine Anweisung dauern .. Also, Ihre ersten 2 Sätze sind falsch – TheLostMind

+0

Sie können sagen, eine gute Frage wird gestellt, wenn es viele Dummkopf Kommentare generiert – sloven

0

Ein natives Programm C oder C++, wenn es kompiliert wird, besteht aus einer Reihe von Assembly (Maschine) Anweisungen. Daher ist es sinnvoll, die Anzahl der Anweisungen zu erörtern, die ausgeführt werden, wenn ein C/C++ Code ausgeführt wird. Wenn Sie jedoch eine Java-Klasse kompilieren, generieren Sie eine .class-Datei, die aus plattformunabhängigem Bytecode besteht. Der Anzahl der Anweisungen von Java würde die Anzahl der Bytecode-Befehle am nächsten kommen.

Dr. Müll hat eine Eclipse plugin for visualizing bytecode. Sie können die Anzahl der Bytecode-Anweisungen durch Überprüfung ermitteln und dann herausfinden, wie viele Gesamtanweisungen ausgeführt wurden.

2

Unter Linux können Sie perf cpu-cycles ausführen Dies wird die Anzahl der CPU-Zyklen zählen, die ein Programm verwendet. Wenn Sie perf list verwenden, können Sie alle anderen Optionen zum Überwachen einer Anwendung sehen.

1

Wenn Sie sich für die Anzahl der JVM-Anweisungen interessieren, können Sie sie von Hand zählen. Quelle:

public static void main() 
{ 
    int a = 0; 
    int b = 0; 
    int c = 0; 
    if (a == b) 
    { 
     c++; 
    } 
} 

Sie an der Bytecode schauen javap -c YouClassName durch den Aufruf:

public static void main(); 
Code: 
    0: iconst_0  
    1: istore_0  
    2: iconst_0  
    3: istore_1  
    4: iconst_0  
    5: istore_2  

    6: iload_0  
    7: iload_1  
    8: if_icmpne  14 
    11: iinc   2, 1 

    14: return   

Die if-Anweisung Sie interessiert waren in kompiliert auf 4 JVM Anweisungen.

+0

ja, ich stimme Ihnen zu, wir werden von Hand zählen. Aber ich möchte die Anweisungen während der Laufzeit zählen. Damit ich zur Laufzeit Optimierungen vornehmen kann. Ist es nicht möglich, die Anweisungen zu zählen? – user3201343

+0

Solange der Code nicht selbst modifiziert wird, sollte er eine feste Anzahl von Anweisungen enthalten. (Ignorieren, dass die JVM Laufzeitoptimierung durchführt ...) – Bodo