知识大全 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) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-缓冲(Buffer)(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-缓存(Cache)(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java程序性能优化-空间换时间[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Java程序性能优化-享元模式(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-单例模式(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-装饰者模式(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Java程序性能优化-对象复用“池”(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java程序性能优化-业务代理模式(1)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java程序性能优化-对象复用“池”(3)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!