相关疑难解决方法(0)

在Java中使用final关键字可以提高性能吗?

在Java中,我们看到许多final可以使用关键字的地方,但它的使用并不常见.

例如:

String str = "abc";
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

在上述情况下,str可以final但通常不会这样做.

当一个方法永远不会被覆盖时,我们可以使用final关键字.类似地,如果一个类不会被继承.

在任何或所有这些案例中使用final关键字是否真的能提高性能?如果是这样,那怎么样?请解释.如果正确使用final真正重要的性能,应在Java程序员开发什么习惯,使关键字的最好用?

java final

332
推荐指数
8
解决办法
8万
查看次数

在Java中内联

在C++中,我可以声明一个方法"内联",编译器可能会内联它.据我所知,Java中没有这样的关键字.

如果JVM决定这样做,内联就完成了吗?我能以某种方式影响这个决定吗?

java jvm inline-method inlining

36
推荐指数
3
解决办法
1万
查看次数

javac或Hotspot会自动添加'final'作为不变变量的优化吗?

共识似乎是将成员变量标记为final有一个性能优势,因为它们永远不需要从主内存重新加载.我的问题是,当变量无法改变时,javac或Hotspot会自动为我做这件事.例如,javac将在下面的这堂课中制作'x'决赛......

public class MyClass {
   private String x;

   MyClass(String x) {
      this.x = x;
   }

   public String getX() {
      return x;
   }
}
Run Code Online (Sandbox Code Playgroud)

在次要问题上,有没有人提出经验证据表明成员最终会使代码运行得更快?在进行远程调用或数据库查找的任何应用程序中,任何好处肯定都可以忽略不计?

java compiler-construction final jvm-hotspot

5
推荐指数
1
解决办法
438
查看次数

在循环中将局部变量声明为final

我知道已经提出并回答了非常相似的问题,我阅读了我能够找到的并且仍然没有100%清楚的问题.

考虑此代码段:

public static void fooMethod {

   while(<...>) {
     ....
     final int temp = <something>;
     ....
   }
}
Run Code Online (Sandbox Code Playgroud)

没有内部阶级,没有别的特殊或不寻常.对我来说似乎是违反直觉的.

final在上面的示例中声明局部变量是否可以用于任何目的?

我是否理解正确有或没有final这里编译器将产生完全相同的字节码?

我在这里错过了什么吗?如果是RTFM案例,请指出正确的方向.

后续问题(如果可以的话)

通过这样的重写来获得和/或失去什么(理解temp不必是原始的)?

public static void fooMethod2 {

   int temp;
   while(<...>) {
     ....
     temp = <something>;
     ....
   }
}
Run Code Online (Sandbox Code Playgroud)

java final local-variables

4
推荐指数
1
解决办法
2246
查看次数