编程语言
首页 > 编程语言> > 在Java中局部变量全局声明静态值是否有性能优势?

在Java中局部变量全局声明静态值是否有性能优势?

作者:互联网

鉴于这些代码示例:

样品1

public class SomeClass {
    private static final int onlyUsedByMethodFoo = 1;
    // many lines of code
    public static void foo() {
        final String value = items[onlyUsedByMethodFoo];
    }
}

样本2

public class SomeClass {
    // many lines of code
    public static void foo() {
        final int onlyUsedByMethodFoo = 1;
        final String value = items[onlyUsedByMethodFoo];
    }
}

我更喜欢第二个代码示例,因为该值接近于使用它的位置.它只用于Foo().我没有看到将它声明为全局值的优势,即使频繁调用Foo()也是如此.我能看到的全局静态值的唯一优势可能在于性能,但目前尚不清楚它将具有多大的性能优势.也许Java认识到这一点并优化了字节码.

关于绩效,是否值得在全球范围内宣布一个恒定的价值?性能增益是否有理由将恒定值从程序员使用和读取的位置移动得更远?

解决方法:

Java编译器用它的值替换所有出现的这个静态final字段;局部变量是运行时堆栈帧的一部分.有关更全面的说明,请参见The Java® Virtual Machine Specification.

我不认为在你的情况下,性能有任何差异.

标签:java,performance,code-smell
来源: https://codeday.me/bug/20190612/1226468.html