Java静态修饰符对运行时性能有积极影响吗?

Tim*_*ser 3 java performance jvm

public class A {
    private int a;
    private static int b;

    public A(int num) {
        this.a = num;
        this.b = num;

        // which one is quickest?
        this.computeA();
        this.computeB();
    }

    public int computeA() {
        return this.a * this.a;
    }

    public static int computeB() {
        return b * b;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,static变量b和方法上的修饰符是否对computeB()JVM上的运行时有任何积极的性能影响?

Pet*_*rey 5

像大多数这些问题一样,你应该首先考虑清晰度,然后将表现放在第二位.使代码清晰简单,并且可能表现得相当好.

在清晰度方面,主要优点是明确表示您没有使用this该方法.这可以使重构方法更容易.

正如@OceanLife所提到的,应该避免使用可变的静态字段.静态字段就像单例,它们更难以进行单元测试并使线程安全.

虽然我会static尽可能地制作方法,但我会避免使用static字段,除非它们是不可变的.

static在一种方法上使用有两个名义性能优势

  • 它意味着在堆栈上传递一个较少的对象.
  • 它不能被覆盖所以它不是"虚拟的"

实际上,JIT可以优化大部分差异,但由于您的代码运行得足以进行优化,因此它可以产生很小的差异.

BTW运行你的代码足以进行优化将产生更多,更多的差异.