`
zhaohaolin
  • 浏览: 1018058 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java高手经验分享 Java性能的十一个用法

    博客分类:
  • JAVA
阅读更多

作者:卡多

  【赛迪网-IT技术报道】

  private static Credit BaseCredit = new Credit();public static Credit getNewCredit() {return (Credit) BaseCredit.clone();}

  Java语言习惯用语

  1。循环

  ■ 在重要的循环里,消除循环终止判断时的方法调用。

  例如:将

  for(int i=0; i<collection.size();i++){ ... }

  替换为…

  for(int i=0; n=collection.size();i<n;i++){...}

  ■ 通常,把与循环index不相关的移到循环的外面

  for(int i=0; terminal=x.length;i<terminal;i++){x[i] = x[i]/scaleA *scaleB;}

  应该该成:

  Double scale = scaleB*scaleA;for(int i=0; terminal=x.length;i<terminal;i++){x[i] = x[i]/scale ;}

  2。字符串

  ■ 消除字符串连接

  ■ 创建长字符串时,总是使用StringBuffter代替String

  ■ 预先分配StringBuffer空间 StringBuffer sb = new StringBuffer(5000);

  3。基本数据类型

  ■ 在重要的循环里使用基本数据类型(int型数据通常比long/double型数据更快)

  ■ 基本数据类型(Boolean,Integer,etc)的包装类主要用在当传递的方法参数必须是一个对象的引用时(而不是一个基本数据类型)

  ■ 对所有的常量代数表达式使用static final修饰符

  ■ 使常量更容易引用(编译器预先计算常量表达式)

  4。异常

  ■ 异常只用于单个真正的错误条件 如小说520网 www.5a520.cn 抛出异常时

  抛出一个异常和执行一个catch代码块花费是很高的(主要由于当创建一个异常时要获得线程栈的一个快照)

  只当条件真的异常时才抛出一个异常

  ■ 抛出异常首先要创建一个新的对象。

  Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。

  只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

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

  ■ 使编译器和运行时最优化,将几个方法调用放在一个try/catch块中,而不是为每个方法调用实现几个try/catch块

  try{ Some.method1(); //Difficut for java1.4 }catch(method1Exception e){ handle exception 1 // to optimize this code } try{ Some.method2(); //Difficut for java1.4 }catch(method2Exception e){ handle exception 2 // to optimize this code } try{ Some.method3(); //Difficut for java1.4 }catch(method3Exception e){ handle exception 3 // to optimize this code }

  应该写为:

  try{ Some.method1(); Some.method2(); Some.method3(); //Difficut for java1.4 }catch(method1Exception e){ handle exception 1 }catch(method2Exception e){ handle exception 2 }catch(method3Exception e){ handle exception 3 }

  5。基准

  ■ 注意,所有这些技巧会因不同的平台和虚拟机而不同

  一 例如:在有些servlet容器内,通过一个OutputStream作为字节输出会更快

  二 在其它的容器内,通过一个PrintWriter输出字符会更快

  ■ 这些技巧描述的是最可移植的建议

  ■ 你可能需要运行一些基准来判断在你的平台上怎么样是最快的

  6。不用new关键词创建类的实例

  ■用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。

  但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

  在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。

  例如,下面是Factory模式的一个典型实现:

  public static Credit getNewCredit() { return new Credit(); }

  优化后:

  private static Credit BaseCredit = new Credit(); public static Credit getNewCredit() { return (Credit) BaseCredit.clone();}

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

7。使用非阻塞I/O

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

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

  8。不要重复初始化变量

  ■默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。

  当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

  9。尽量指定类的final修饰符

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

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

  10。尽量使用局部变量

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

  11。乘法和除法

  ■考虑下面的代码:

  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编程经验分享”中,我们将深入探讨一些关键的Java编程概念和实践经验,帮助开发者提升技能,优化代码,以及解决日常开发中遇到的问题。 首先,Java的基础知识是至关重要的。这包括理解基本数据类型...

    java经验分享

    ### Java开发经验分享:提升代码质量和效率的关键实践 在Java开发领域,良好的编码习惯和实践是确保项目成功、代码质量及团队协作效率的关键。以下是从标题、描述、标签以及部分内容中提炼出的重要知识点,旨在帮助...

    java面试资料积累,经验分享.zip

    这份"java面试资料积累,经验分享.zip"压缩包显然是一份宝贵的资源,包含了作者在面试过程中遇到的各类Java问题和经验总结,对于想要深入学习Java或者正在准备Java面试的人来说,无疑是宝贵的参考资料。 一、基础...

    Java高手真经下载地址

    《Java高手真经》系列资料不仅提供了丰富的理论知识,还包含了大量实践案例和项目经验分享,对于希望提升Java技能、深化对Web开发理解的专业人士来说,是一套不可多得的学习资源。通过系统地学习这些资料,开发者...

    java高手的文章合集

    这个名为"java高手的文章合集"的压缩文件显然包含了多位专家或爱好者关于Java编程的深入探讨和经验分享。从文件名来看,这是一个分部分的集合,包括四个部分:part1到part4,这通常意味着内容较多,可能涵盖了Java的...

    阿里巴巴java性能调优实战手册

    作者随后提出了一套系统的调优方法论,他将Java性能调优分为七大模块,由浅入深地对每个模块的优化技术进行了详细阐述。 首先是性能调优的标准模块,作者提出了一系列性能评价标准和监控指标,强调了在优化之前,应...

    Java 性能优化实战 21 讲

    在Java性能优化实战的21讲中,涵盖了Java开发...通过以上21个主题的学习,开发者将能够全面掌握Java性能优化的理论知识和实践经验,从而在实际工作中提升应用的性能,解决性能问题,为系统的稳定高效运行打下坚实基础。

    []java开发经验分享.doc

    Java 开发经验分享 本文分享了多年的 Java 开发经验,总结了 14 条重要的编程经验,旨在提高代码质量、提高开发效率和避免常见错误。 1. 约束自己,规范编码习惯 在编码时,应该遵守一定的编码规范,包括充足的...

    java设计模式与经验总结

    总的来说,"java设计模式与经验总结"这个资源为Java开发者提供了一个全面的学习平台,结合实际经验分享和设计模式的深入解析,能够极大地提升开发者的专业技能和解决问题的能力。对于任何致力于提升自己Java技术水平...

    JMH简介Java开发Java经验技巧共8页.pdf.zi

    【标签】:“JMH简介Java开发Java经” 这个标签简洁地概述了文档的主题,包括JMH的基础知识,Java开发的实践,以及可能涵盖的Java经验分享。 在深入讨论JMH之前,先理解什么是微基准测试。微基准测试是一种衡量代码...

    Java程序员高手文章集+(PDF)javalearnsa资料分享

    【Java程序员高手文章集+(PDF)javalearnsa资料分享】是一个针对Java开发者的资源集合,其中包含了丰富的学习材料和实战经验分享。这份资料旨在帮助Java程序员提升技能,成为真正的高手。通过深入学习和理解这些内容...

    Java编程经验汇总

    本文旨在为大家分享Java编程经验,帮助大家快速提升Java基础。以下是对Java编程经验的总结和分享。 1. 动态加载机制 Java语言的特点之一是动态加载机制。很多人都能背出来Java语言的特点,但是真正体会过动态加载...

    2024 Java Spring框架入门心得与实战经验分享.zip

    内容概要:这篇文章是一篇关于Java Spring框架的入门心得和实战经验分享。作者以通俗易懂的语言,介绍了Spring框架的核心概念,如IoC(控制反转)、AOP(面向切面编程)等,并分享了自己在实际项目中使用Spring框架...

    几十个java游戏源代码打包,仅供学习使用。

    Java是一种广泛使用的编程语言,尤其在游戏开发领域中有着重要的地位。这个压缩包包含了几十个用Java编写的源代码,是学习Java游戏编程的理想资源。这些小游戏不仅展示了基础的编程概念,还涵盖了Java语言的核心特性...

    JavaNIO服务器实例Java开发Java经验技巧共6页

    本资料"JavaNIO服务器实例Java开发Java经验技巧共6页"可能是某个Java开发者或讲师分享的一份关于如何在Java中构建NIO服务器的教程,涵盖了6个关键页面的内容。尽管具体的细节无法在此直接提供,但我们可以根据Java ...

    Halcon算子 机器视觉 深度学习 Java开发手册

    此外,本书作为阿里巴巴Java开发手册的终极版,很可能包含了一些阿里巴巴内部的最佳实践和经验分享,如如何在大规模生产环境中部署和维护机器视觉系统,如何进行性能优化,以及如何应对各种实际问题的解决方案。...

    java自定义线程模型处理方法分享

    本文将深入探讨如何在Java中构建自定义线程模型,并分享一些实践经验。 首先,我们要明白为什么要自定义线程模型。在游戏开发中,线程的划分和管理至关重要,因为它直接影响游戏的性能和稳定性。例如,在MMORPG或...

    JavaMelody开源系统性能监测

    博主可能分享了一些实战经验,包括如何解决遇到的问题,或者如何根据监控数据优化系统性能。 总之,JavaMelody是一款强大的工具,它为Java Web应用的性能优化提供了有力的支持,无论是在开发阶段还是生产环境中,都...

Global site tag (gtag.js) - Google Analytics