`
mars914
  • 浏览: 430181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA性能优化-通用篇(转)

 
阅读更多
“通用篇”讨论的问题适合于大多数Java应用。
  1.1 不用new关键词创建类的实例

  用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

  在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

public static Credit getNewCredit()
  {

   return new Credit();

  }




  改进后的代码使用clone()方法,如下所示:

private static Credit BaseCredit = new Credit();
  public static Credit getNewCredit()

  {

   return (Credit) BaseCredit.clone();

  }


   上面的思路对于数组处理同样很有用。


  1.2 使用非阻塞I/O

  版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。

  JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。

  1.3 慎用异常

  异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地 (Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

  异常只能用于错误处理,不应该用来控制程序流程。

  1.4 不要重复初始化变量

  默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

  1.5 尽量指定类的final修饰符

  带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。

  另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

  1.6 尽量使用局部变量

  调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。

  1.7 乘法和除法

  考虑下面的代码:

  for (val = 0; val < 100000; val +=5)

  {

   alterX = val * 8;

   myResult = val * 2;

  }

  用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:

  for (val = 0; val < 100000; val += 5)

  {

   alterX = val << 3;

   myResult = val << 1;

  }



  修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。
分享到:
评论

相关推荐

    Java性能优化技巧集锦

    里面分java通用篇,j2EE篇,GUI篇,EJB篇,缓存的优化等,并且提供了参考的文献

    性能优化.pdf

    作为一个程序员,性能优化是常有的事情,不管是桌面应用...本文从以下几个方面来思考这个问题:性能优化的一般性原则,性能优化的层次,性能优化的通用方法。本文不限于任何语言、框架,不过可能会用java语言来举例。

    AES-Java-iOS-Android.zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用...

    Java实现FP-growth算法.zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用...

    MF00098-通用后台系统.zip

    SpringMVC通用后台管理系统源码 开发语言 : JAVA 数据库 : MySQL 开发工具 : MyEclipse 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 整体的SSM后台管理框架功能已经初具...

    新版Android开发教程.rar

    程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...

    综述一种嵌入式Java虚拟机的性能优化技术设计与实现.pdf

    当前对于嵌入式系统尚没有一个明确的定义,主要原因就是由于硬件性能的提升以及价格的下降,使得嵌入式系统与通用计算机之间的界限变得很模糊。因此,若是从技术的进步上讲,对嵌入式是很难定义的。一般情况下,对于...

    java和android 通用的rsa 加密封装 .zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    JAVA上百实例源码以及开源项目

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

    java8源码-SpringTree:互联网通用技术

    函数式编程基础,优化美丽的高性能代码 函数式编程 Consumer 3:Redis 让业务更快,让锁,mq有多重选择 4:Guava Ratelimiter接口限速 Preconditions参数检测 本地缓存 CacheBuilder(相比于数组,List, 可固定大小,...

    (JAVA 版本的 官方经典PHash算法).zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用...

    第8章 通用新闻采集系统----大型门户网站是这样炼成的

    本书详细介绍了以JSP 2、Struts 2、Spring 2.5、Hibernate 3.2、AJAX等主流JavaEE技术进行优化组合开发高性能大型门户网站的实践经验。针对读者的不同学习阶段,共分技术篇、实践篇与部署篇三大部分进行循序渐进地...

    linq-to-java:将LINQ列表查询移植到Java

    它尚未经过性能测试,尚未优化。 许多事情都是“快速而肮脏的”(请阅读我的一些TODO)。 一些代码具有副作用(大多数方法不是纯函数)。 这是有关如何使用某些代码的示例: 公开课测试{ public static void main...

    金山词霸java手机版

    金山出品:手机版金山词霸3.2版(JAR格式) 支持整句翻译+情景例句 ...Java通用版适用于所有非触屏分辨率为240*320,320*240 176*220的机型(支持Java的手机) 包括诺基亚S40,索爱,Moto,联想,天语等

    最大熵-IIS(Improved Iterative Scaling)训练算法的Java实现.zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用程序...

    S-FTPClient(Swing,Java,Socket,FTP,加密算法).zip

    健壮性与高性能:Java通过垃圾回收机制确保内存的有效管理,同时也能通过JIT编译器优化来提升运行时性能。 标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用...

    大型门户网站是这样炼成的 源码下载

    第5章 Hibernate3持久化技术实践与性能优化 第6章 充分利用Spring2的IOC利器统管Bean世界 第8章 通用新闻采集系统 综合实例-免费电子商务平台 内含jar包等文件,解压出来200M++,用【winrar】即可解压7z格式的文件。...

    java源码生成-Kores:从抽象表示生成源代码和字节码。字节码生成框架

    投稿者注意:始终会严格分析性能提升请求,我不需要考虑做一些优化,因为JVM能够解决第3-4次代码执行中的问题。 科雷斯4 在Kores 4中,某些接口更改为具体的最终类(设计决策...)以保持一致性。 Kores 4与旧版本...

Global site tag (gtag.js) - Google Analytics