知识大全 Java程序性能优化(1)

Posted

篇首语:任何事情的发生必有其目的,并且有助于我。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java程序性能优化(1)相关的知识,希望对你有一定的参考价值。

Java程序性能优化(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 避免在循环条件中使用复杂表达式

  在不做编译优化的情况下 在循环中 循环条件会被反复计算 如果不使用复杂表达式 而使循环条件值不变的话 程序将会运行的更快

  例子

  import java util Vector;

  class CEL

  void method (Vector vector)

  for (int i = ; i < vector size (); i++)  // Violation

  ; //

  

  

  更正

  class CEL_fixed

  void method (Vector vector)

  int size = vector size ()

  for (int i = ; i < size; i++)

  ; //

  

  

  二 为 Vectors 和 Hashtables 定义初始大小

  JVM为Vector扩充大小的时候需要重新创建一个更大的数组 将原原先数组中的内容复制过来 最后 原先的数组再被回收 可见Vector容量的扩大是一个颇费时间的事

  通常 默认的 个元素大小是不够的 你最好能准确的估计你所需要的最佳大小

  例子

  import java util Vector;

  public class DIC

  public void addObjects (Object[] o)

  // if length > Vector needs to expand

  for (int i = ; i< o length;i++)

  v add(o);   // capacity before it can add more elements

  

  

  public Vector v = new Vector();  // no initialCapacity

  

  更正

  自己设定初始大小

  public Vector v = new Vector( );

  public Hashtable hash = new Hashtable( );

  参考资料

  Dov Bulka Java Performance and Scalability Volume : Server Side Programming

  Techniques Addison Wesley ISBN: pp –

  三 在finally块中关闭Stream

  程序中使用到的资源应当被释放 以避免资源泄漏 这最好在finally块中去做 不管程序执行的结果如何 finally块总是会执行的 以确保资源的正确关闭

  例子

  import java io *;

  public class CS

  public static void main (String args[])

  CS cs = new CS ();

  thod ();

  

  public void method ()

  try

  FileInputStream fis = new FileInputStream ( CS java );

  int count = ;

  while (fis read () != )

  count++;

  System out println (count);

  fis close ();

   catch (FileNotFoundException e )

   catch (IOException e )

  

  

  

  更正

  在最后一个catch后添加一个finally块

  参考资料

  Peter Haggar: Practical Java Programming Language Guide

  Addison Wesley pp

  四 使用 System arraycopy () 代替通过来循环复制数组

   System arraycopy () 要比通过循环来复制数组快的多

  例子

  public class IRB

  

  void method ()

  int[] array = new int [ ];

  for (int i = ; i < array length; i++)

  array [i] = i;

  

  int[] array = new int [ ];

  for (int i = ; i < array length; i++)

  array [i] = array [i];                 // Violation

  

  

  

  更正

  public class IRB

  

  void method ()

  int[] array = new int [ ];

  for (int i = ; i < array length; i++)

  array [i] = i;

  

  int[] array = new int [ ];

  System arraycopy(array array );

  

  

  参考资料

  

  五 让访问实例内变量的getter/setter方法变成 final

  简单的getter/setter方法应该被置成final 这会告诉编译器 这个方法不会被重载 所以 可以变成 inlined

  例子

  class MAF

  public void setSize (int size)

  _size = size;

  

  private int _size;

  

  更正

  class DAF_fixed

  final public void setSize (int size)

  _size = size;

  

  private int _size;

  

  参考资料

  Warren N and Bishop P ( ) Java in Practice p

  Addison Wesley ISBN

  六 避免不需要的instanceof操作

  如果左边的对象的静态类型等于右边的 instanceof表达式返回永远为true

  例子

  public class UISO

  public UISO ()

  

  class Dog extends UISO

  void method (Dog dog UISO u)

  Dog d = dog;

  if (d instanceof UISO) // always true

  System out println( Dog is a UISO );

  UISO uiso = u;

  if (uiso instanceof Object) // always true

  System out println( uiso is an Object );

  

  

  更正

  删掉不需要的instanceof操作

  class Dog extends UISO

  void method ()

  Dog d;

  System out println ( Dog is an UISO );

  System out println ( UISO is an UISO );

  

  

  七 避免不需要的造型操作

  所有的类都是直接或者间接继承自Object 同样 所有的子类也都隐含的 等于 其父类 那么 由子类造型至父类的操作就是不必要的了

  例子

  class UNC

  String _id = UNC ;

  

  class Dog extends UNC

  void method ()

  Dog dog = new Dog ();

  UNC animal = (UNC)dog;  // not necessary

  Object o = (Object)dog;         // not necessary

  

  

  更正

  class Dog extends UNC

  void method ()

  Dog dog = new Dog();

  UNC animal = dog;

  Object o = dog;

  

  

  参考资料

  Nigel Warren Philip Bishop: Java in Practice Design Styles and Idioms

cha138/Article/program/Java/hx/201311/25979

相关参考

知识大全 Java程序性能优化-代理模式(1)

Java程序性能优化-代理模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-缓冲(Buffer)(1)

Java程序性能优化-缓冲(Buffer)(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-缓存(Cache)(1)

Java程序性能优化-缓存(Cache)(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-空间换时间[1]

Java程序性能优化-空间换时间[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-享元模式(1)

Java程序性能优化-享元模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-单例模式(1)

Java程序性能优化-单例模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-装饰者模式(1)

Java程序性能优化-装饰者模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-对象复用“池”(1)

Java程序性能优化-对象复用“池”(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nb

知识大全 Java程序性能优化-业务代理模式(1)[1]

Java程序性能优化-业务代理模式(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-对象复用“池”(3)[1]

Java程序性能优化-对象复用“池”(3)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!