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

是的,它可以。这是final可以提升性能的实例:

条件编译是一种技术,其中代码行不会根据特定条件编译到类文件中。这可用于删除生产版本中的大量调试代码。

考虑以下:

public class ConditionalCompile {

private final static boolean doSomething= false;

if (doSomething) {

// do first part.

}

if (doSomething) {

// do second part.

}

if (doSomething) {

// do third part.

}

if (doSomething) {

// do finalization part.

}

}

通过将doSomething属性转换为final属性,您告诉编译器每当它看到doSomething时,它应该根据编译时替换规则将其替换为false。编译器的第一遍改变代码的东西是这样的:

public class ConditionalCompile {

private final static boolean doSomething= false;

if (false){

// do first part.

}

if (false){

// do second part.

}

if (false){

// do third part.

}

if (false){

// do finalization part.

}

}

完成此操作后,编译器将再次查看它,并发现代码中存在无法访问的语句。由于您使用的是高质量的编译器,因此它不喜欢所有那些无法访问的字节代码。所以它删除它们,你最终得到这个:

public class ConditionalCompile {

private final static boolean doSomething= false;

public static void someMethodBetter( ) {

// do first part.

// do second part.

// do third part.

// do finalization part.

}

}

从而减少任何过多的代码,或任何不必要的条件检查。

编辑:举个例子,我们来看下面的代码:

public class Test {

public static final void main(String[] args) {

boolean x = false;

if (x) {

System.out.println("x");

}

final boolean y = false;

if (y) {

System.out.println("y");

}

if (false) {

System.out.println("z");

}

}

}

使用Java 8编译此代码并使用反编译时,javap -c Test.class我们得到:

public class Test {

public Test();

Code:

0: aload_0

1: invokespecial #8                  // Method java/lang/Object."":()V

4: return

public static final void main(java.lang.String[]);

Code:

0: iconst_0

1: istore_1

2: iload_1

3: ifeq          14

6: getstatic     #16                 // Field java/lang/System.out:Ljava/io/PrintStream;

9: ldc           #22                 // String x

11: invokevirtual #24                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

14: iconst_0

15: istore_2

16: return

}

我们可以注意到编译的代码只包含非final变量x。这证明了最终变量对性能的影响,至少对于这个简单的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值