静态方法作为独立类慢吗?

时间:2014-04-01 10:46:51

标签: java performance

我在想:

假设我有一个使用静态对象进行某些计算的类:

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传递指针,所以应该没有区别。但编译器是否必须挖掘更多代码,因此计算时间会增加?

3 个答案:

答案 0 :(得分:2)

  

但编译器是否必须挖掘更多代码,因此计算时间会增加?

你必须指编译时间。计算在运行时发生,其性能与编译计算代码所花费的时间无关。

换句话说:静态方法的位置对性能没有影响。

答案 1 :(得分:1)

编译器会有更多的工作,但在运行时它不会有任何区别。特别是,如果该(短)方法运行足够多次,它将被内联,因此其原始位置无关紧要。

答案 2 :(得分:1)

使用static方法的开销略低,因为您已经保证编译时绑定。 Static方法调用将创建bytecode指令invokestatic. ]

在实践中,它不会有任何区别。 JVM可以选择以一种方式进行优化,使static次调用对于类中的一个方法更快,static对另一个类中的另一个方法调用更快。您遇到的性能损失的根本原因主要是由于过早优化。

另请注意,旧的JVM可能/可能没有优化功能。