`
yu2di13
  • 浏览: 11205 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA 尽量使用局部变量优化性能

    博客分类:
  • Java
 
阅读更多

 

java程序包含了大量的对象,我们需要了解它们是从哪里被访问的,变量存储于何处对程序的性能有显著的影响--尤其是某些需要被频繁访问的变量。

  我们写一个Java类,在其内部方法中定义的局部变量或对象是存储在stack(堆栈)中的,且JVM是一种stack-based的,因此访问和操纵stack中的数据时性能最佳。而Java类的instance变量(这个类的field)和static变量是在constantpool(常量池)中存储和得到访问的。constantpool中保存了所有的符号引用(symbolicreferences),指向所有型别(types)、值域(field),以及每个型别所使用的所有函数(mothods)。访问instance和static变量时,由于它们存放于constantpool中,所以JVM需要使用更多更耗时的操作码(分析程序生成的bytecode可以看出来)来访问它们。

  下面给出一段代码示例,对比后说明怎么尽可能地使用stack变量:
  packagetest;
  publicclassStackVars{
  privateintx;//instance变量
  privatestaticintstaticX;//static变量
  publicvoidstackAccess(intval){//访问和操作stack变量j
  intj=0;
  for(inti=0;i<val;i++){
  j+=1;
  }
  }
  publicvoidinstanceAccess(intval){//访问和操作instance变量x
  for(inti=0;i<val;i++){
  x+=1;
  }
  }
  publicvoidstaticAccess(intval){//访问和操作static变量staticX
  for(inti=0;i<val;i++){
  staticX+=1;
  }
  }
  }
  经测试,发现运行instanceAccess()和staticAccess()方法的时间大约相同,但却比运行stackAccess()方法慢了2~3倍。因此我们对instanceAccess()、staticAccess()两个方法的代码作以下调整,以得到更快的性能:
  publicvoidinstanceAccess(intval){//访问和操作instance变量x
  inttempX=x;
  for(inti=0;i<val;i++){
  tempX+=1;
  }
  x=tempX;
  }
  publicvoidstaticAccess(intval){//访问和操作static变量staticX
  inttempStaticX=staticX;
  for(inti=0;i<val;i++){
  tempStaticX+=1;
  }
  staticX=tempStaticX;
  }
  改善之处就是将instance和static变量放到循环之外,而用一个stack变量来完成多次局部运算,最后再将这个stack变量的值传回instance或static变量,从而提高了代码的性能。

 

 

原文链接:http://www.cc580.com/article/sort015/info-3169.html

分享到:
评论

相关推荐

    JAVA程序性能优化

    2. **使用局部变量**:尽量使用局部变量代替全局变量或对象成员,减少对象的引用查找开销。 3. **避免同步块**:同步块会降低多线程程序的并发性能,除非确实需要同步。 4. **使用缓存**:对于经常重复计算的结果,...

    Java程序性能优化 让你的Java程序更快、更稳定

    5. **代码优化**:避免冗余计算,使用局部变量存储重复计算的结果,减少方法调用。同时,注意消除空指针异常,减少异常处理的开销。 6. **延迟加载与懒初始化**:对于不立即需要的资源,可采用延迟加载策略,只在...

    java开发性能优化

    5. **优先使用局部变量**:局部变量在栈中存储,访问速度快。尽量减少实例变量和静态变量的使用,除非必要。 6. **包装类型与基本类型的使用**:根据场景选择使用包装类型或基本类型。包装类型适用于对象操作,基本...

    Java程序性能优化 让你的Java程序更快、更稳定.zip

    4. 使用局部变量:避免在循环中使用方法调用来获取对象,这会增加额外的开销。 三、算法和数据结构优化 选择合适的算法和数据结构对程序性能至关重要。例如,优先使用ArrayList而非LinkedList进行遍历操作,因为...

    Java性能优化比较

    例如,对于频繁执行的操作,应尽量使用局部变量而不是每次调用方法;尽量使用StringBuilder或StringBuffer来拼接字符串,避免使用"+"操作符导致的大量字符串对象创建;选择适合场景的集合类,如ArrayList适用于随机...

    Java性能优化的45个细节.pdf

    根据提供的文件信息,以下是关于Java性能优化的详细知识点,内容包括单例模式的合理应用、静态变量的使用考量、对象创建与垃圾回收策略、final修饰符与内联优化、局部变量与实例变量的性能差异、包装类型与基本类型...

    java系统性能优化手册

    1. **循环中的局部变量**:应避免在循环中定义局部变量,这样可以减少内存的频繁分配与释放,降低垃圾回收的压力。 2. **集合类的选择**: - `ArrayList` 性能优于 `Vector`,除非你需要线程安全的集合。 - `...

    java性能优化集锦

    3. **合理利用final关键字**:final可以提升方法内局部变量的访问速度,并有助于编译器进行优化。 4. **减少对象创建**:过多的对象创建会导致垃圾收集频繁,考虑复用或使用池化技术。 5. **避免大量使用...

    Java性能优化技巧集锦.doc

    因此,应该尽量使用局部变量,而不是静态变量或实例变量。 1.7 乘法和除法 应该尽量避免使用乘法和除法运算,因为它们比其他运算符慢得多。可以使用其他方法来实现这些运算,例如使用位移运算符。 二、J2EE 篇 ...

    Java性能优化的45个细节

    4. **使用局部变量**:尽可能减少方法的参数,避免方法间共享对象,提高局部性原理的利用。 5. **避免空对象检查**:如果可能,使用Optional类来封装可能为null的对象,减少显式的null检查。 6. **使用equals()与...

    java性能优化

    ### Java性能优化关键知识点 #### 一、合理运用单例模式 - **目的**:单例模式主要用于控制资源使用、节约资源以及实现跨进程或线程间的通信。 - **应用场景**: - 控制资源使用:通过线程同步机制限制资源的并发...

    Java编程中“为了性能”尽量要做到的一些地方

    尽量使用局部变量 局部变量存储在栈中,访问速度快于堆中的对象。因此,对于那些生命周期较短、不需要长时间存在的变量,优先考虑使用局部变量。 #### 6. 慎重处理包装类型和基本类型的使用场景 基本类型和包装...

    Java性能优化

    在Java性能优化中,合理使用单例模式可以带来以下优势: 1. **控制资源使用**:通过线程同步来控制资源的并发访问,尤其是在多线程环境下,可以有效减少资源竞争,提高资源利用率。 2. **控制实例产生**:减少不必...

    java代码性能的优化

    ### Java代码性能优化的关键知识点 在开发过程中,代码性能优化是一项至关重要的工作,尤其是在Java这样的广泛应用的语言中。本文将从给定的文件信息出发,详细阐述如何通过一系列具体的方法来提高Java代码的质量与...

    Java性能优化技巧集锦

    - **优化建议**: 尽可能使用局部变量,并利用编译器/虚拟机对局部变量的优化机制。 **1.7 乘法和除法** - **背景**: 直接使用乘法和除法运算符可能导致性能下降。 - **优化建议**: 考虑使用移位操作代替乘法和除法...

    java代码优化编程

    在可能的情况下,尽量使用局部变量,避免不必要的对象创建和垃圾回收。 4. 不要重复初始化变量:Java会在构造函数中默认初始化变量,避免在代码中重复初始化,以减少不必要的计算。 5. SQL语句规范:在Oracle...

    Java性能优化【技巧】集锦.pdf

    6. 尽量使用局部变量,可以减少内存的使用。 7. 乘法和除法操作可以使用乘法和除法代替,可以减少计算的时间。 8. 尽量重用对象,可以减少对象的创建。 J2EE 篇 在 J2EE 篇中,我们讨论了一些 J2EE 相关的性能优化...

    Java编程中影响性能的细节

    在Java编程中,优化性能是开发者必须关注的重要环节。以下是一些关键的性能优化细节: 1. **使用单例模式**:单例模式可以确保一个类只有一个实例,从而节省资源和提高效率。不过,过度使用单例可能导致设计复杂性...

Global site tag (gtag.js) - Google Analytics