Java程序性能优化总结--------线程、I/O及系统篇

来源:互联网 发布:学会简单plc编程多少钱 编辑:程序博客网 时间:2024/06/05 12:08

 

 

线程相关的优化

1. 尽可能减少同步线程同步(thread synchoronize)

  同步主要出现在多线程的情况,为多线程同时运行时提供对象数据安全的机制,应用多线程也是为了获得性能的提升,应该尽可能减少同步。

  另外,如果需要同步的地方,可以减少同步的代码段,如只同步某个方法或函数,而不是整个代码。

 

2. 线程非安全速度上优于线程安全

StringBuilder/StringBuffer

ArrayList/Vector

HashMap/HashTable

 



I/O 性能优化

  输入/输出(I/O)包括很多方面,我们知道,进行I/O操作是很费系统资源的。程序中应该尽量少用I/O操作。使用时可以注意:

        合理控制输出函数System.out.println()对于大多时候是有用的,特别是系统调试的时候,但也会产生大量的信息出现在控制台和日志上,同时输出时,有序列化和同步的过程,造成了开销。

  特别是在发行版中,要合理的控制输出,可以在项目开发时,设计好一个Debug的工具类,在该类中可以实现输出开关,输出的级别,根据不同的情况进行不同的输出的控制。

1.使用带有Buffer的类

  读写内存要比读写文件要快很多,应尽可能使用缓冲。

  尽可能使用带有Buffer的类代替没有Buffer的类,如可以用BufferedReader 代替Reader,用BufferedWriter代替Writer来进行处理I/O操作。

  同样可以用BufferedInputStream代替InputStream都可以获得性能的提高。

2.使用字节操作

字节操作最快,所以尽可能采用write(byte[])Buffered FileOutputStreamBuffered FileWriter要快,因为FileWriter需要UnicodeByte的转换。


 


使用Java系统API优化

  JavaAPI一般都做了性能的考虑,如果完成相同的功能,优先使用API而不是自己写的代码,如数组复制通常的代码如下:

int size = 1000;
String[] strArray1 = new String[size];
String[] strArray2 = new String[size];
for(inti=0;i
size;i++){ // 赋值
 strArray1[i] = (new String("Array: " + i));
}

for(inti=0;i
size;i++){ // 复制
 strArray2[i]=(new String((String)a[i]));
}

  如果使用Java提供的API,就可以提高性能:

int size = 1000;
String[] strArray1 = new String[size];
String[] strArray2 = new String[size];
for(inti=0;i
size;i++){ // 赋值
strArray1[i] = (new String("Array: " + i));
}

System.arraycopy(strArray1,0,strArray2,0,size); //
复制

  同样的一个规则是,当有大量数据的复制时,应该使用System.arraycopy()