首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java静态/实例方法优化

Java静态/实例方法优化
EN

Stack Overflow用户
提问于 2016-05-11 08:27:43
回答 2查看 597关注 0票数 1

在Java中有未修改的方法变量,这些变量缺少final,限定符每次在

  1. 静态法
  2. 实例法

如果1.或2.的答案(或两者兼而有之),final限定符是否允许Java执行优化并只存储一次方法变量?

如果答案取决于变量的类型,那么哪种类型的变量是优化的/未优化的?例如,Stringint是优化的,而Map没有优化吗?

比较而言,Java只存储一个静态类变量,如

代码语言:javascript
复制
private static final String foo = "Teenage Mutant Ninja Turtle";

一次。澄清:问题是是否

1:

代码语言:javascript
复制
static SomeReturnValueOrVoid SomeMethod() {
    // 1.a Not modified, is this reinitialized each method call?
    String foo = "Teenage Mutant Ninja Turtle";

    // 1.b Marked final, is this reinitialized each method call?
    final String bar = "Teenage Mutant Hero Turtle"; 
}

2:

代码语言:javascript
复制
SomeReturnValueOrVoid SomeMethod() { // not static
    // 2.a Not modified, is this reinitialized each method call?
    String foo = "Teenage Mutant Ninja Turtle";

    // 2.b Marked final, is this reinitialized each method call?
    final String bar = "Teenage Mutant Hero Turtle"; 
}

等于

3:

代码语言:javascript
复制
class SomeClass {
    static final String foo = "Teenage Mutant Ninja Turtle";

    SomeReturnValueOrVoid SomeMethod() {
        // Uses foo
    }

    static SomeReturnValueOrVoid SomeMethod() {
        // Uses foo
    }

    ...
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-11 08:56:18

无论是static方法还是final变量,或者两者兼而有之,都没有区别。局部变量的作用域意味着这个赋值每次都会发生(除了优化的时候*)。

但是,当涉及到示例中的字符串时,字符串将来自字符串池。因此,赋值每次都会发生,但它们都将引用相同的string实例。

*优化-- JIT编译器可能会内联这些值,因此每个解决方案的运行速度可能与另一个相同。因此,除非您意识到实际的性能问题,否则不应该尝试对自己进行微优化。

票数 3
EN

Stack Overflow用户

发布于 2016-05-11 09:04:49

在Java中有未经修改的方法变量,这些变量没有每次重新初始化最后的限定符。

(调用该方法)--当然是,否则它们将未初始化。

我想你真正想问的是,这个初始化能不能在某种程度上得到优化?如果为变量分配了一个常量值,那么是的;JIT编译器可能会完全删除变量,并用它的(已知常量)值替换对它的引用。

最终限定符是否允许Java执行优化并只存储一次方法变量?

不是的。final-qualified局部变量不能更改其值,但方法的每次调用都有它自己的变量副本,不同的实例化可能对同一个final变量使用不同的值。考虑:

代码语言:javascript
复制
void someMethod()
{
   final int number = new Random().nextInt();
}

在程序执行期间,不能只分配一次该值,因为每次调用该方法时,它都是不同的。

局部变量上的final修饰符对优化几乎没有或没有直接影响。它只对变量所能做的操作设置限制--对任何变量都可能遵循的限制,而不管final限定条件如何--而这反过来又允许某些优化。如果优化器值得它的salt,它不会关心变量是否声明为final,而是考虑它是否是有效的常量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37157002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档