线程相关的优化
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 FileOutputStream比Buffered FileWriter要快,因为FileWriter需要Unicode到Byte的转换。
使用Java系统API优化
Java的API一般都做了性能的考虑,如果完成相同的功能,优先使用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()。