2015-04-02 100 views
5

我想知道我的java代碼需要執行多少條指令。我找這將啓動指令數和指令的最終總數應在年底有什麼方法可以計算java中的指令數

例如返回一個API:

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

末了,正應該代表的指令總數在致電startCountinst()後執行。在java中可以計算指令嗎?

+1

爲什麼要計算指令數量? – Pratik 2015-04-02 05:37:51

+1

1.選擇一種語言。 2.定義你想要在哪個級別上計算指令的數量(字節碼,彙編,機器級別)。 3.根據編譯器,jvm,機器體系結構等的不同,每個級別的答案都會有所不同。所以不可能給出正確的答案 – TheLostMind 2015-04-02 05:48:22

+0

它在java中是如此明顯的字節碼。所以難以統計指令? – user3201343 2015-04-02 08:27:42

回答

1

我喜歡這個問題。可以用來衡量表現。但並非每一條指令都需要相等的時間所以你最好看看分析你的代碼。

的JProfiler是相當流行:

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

而且有幾個可用的替代品。只需要Google for java profiler並看看。大量的信息可用。

+0

指令的數量與*性能*沒有直接關係。 5條指令可能需要的時間少於一條指令..所以,你的前2個句子是不正確的 – TheLostMind 2015-04-02 05:49:57

+0

你可以告訴一個很好的問題,當它產生很多愚蠢的評論時被問到 – sloven 2017-05-03 18:07:54

0

本地CC++程序在編譯時將包含一組彙編(機器)指令。因此,討論在運行代碼時將執行的指令數量是有意義的。但是,當編譯Java類時,會生成一個由平臺無關的字節碼組成的文件.class。與Java的指令數量最接近的是字節碼指令的數量。

Dr. Garbage有一個Eclipse plugin for visualizing bytecode。您可以通過檢查確定字節碼指令的數量,然後確定已經執行了多少個指令。

2

在Linux上,您可以運行perf cpu-cycles這將計算程序使用的CPU週期數。如果您使用perf list,則可以看到用於監視應用程序的所有其他選項。

1

如果您對JVM指令的數量感興趣,可以手工計算它們。來源:

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

你可以看一下字節碼通過調用javap -c YouClassName

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   

的,如果你有興趣的語句編譯成4個JVM指令。

+0

是的,我同意你,我們將手工計數。但是我想在運行時計數指令。這樣我可以在運行時進行優化。是否無法計算指令? – user3201343 2015-04-02 08:25:40

+0

只要代碼不是自我修改,它應該保持固定數量的指令。 (忽略JVM將執行運行時優化...) – Bodo 2015-05-19 05:50:08

相關問題