2014-04-01 54 views
0

我想知道:靜態方法比獨立類慢嗎?

比方說,我有一個使用靜態對象做某些計算類:

public class test { 

    static String test = "Hello World"; 

    public static void main(String[] args) 
    { 
     System.out.println(staticMethod()); 
    } 

    static String staticMethod() 
    { 
     return test; 
    } 
} 

現在會有在計算時間差,如果我會使用另一個類,如下所示:

public class test { 

    static String test = "Hello World"; 

    public static void main(String[] args) 
    { 
     System.out.println(test2.staticMethod()); 
    } 

} 

import static dataConnection.test.*; 

public class test2 { 

    static String staticMethod() 
    { 
     return test; 
    } 

} 

因此,如果我移動靜態方法變成不同的類?

我的理論是因爲Java通過指針,應該沒有區別。但編譯器不需要挖掘更多代碼,因此計算時間會增加?

回答

2

但編譯器不得不挖掘更多的代碼,因此計算時間會增加嗎?

你的意思是彙編時間。計算在運行時發生,其性能與編譯計算代碼所用的時間無關。

換句話說:靜態方法的位置對性能沒有影響。

1

編譯器會有更多的工作,但在運行時它不會有任何區別。特別是,如果(短)方法運行足夠多的時間,它將被內聯,因此它的原始位置是不相關的。

1

使用static方法的開銷稍小,因爲您已確保編譯時綁定。 Static方法調用將創建指令bytecodeinvokestatic. ]

實際上,它不會有任何區別。 JVM可以選擇優化的方式使static對一個類中的某個方法調用更快,static對另一個類中另一個方法的調用更快。造成性能下降的根本原因主要是由於過早優化。

另請注意,舊的JVM可能/可能沒有優化功能。

+0

謝謝!很多附加價值的當前答案。我很感激! –