热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

是的,它可以。这是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。这证明了最终变量对性能的影响,至少对于这个简单的情况。



推荐阅读
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
author-avatar
awrjftyitik
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有