Java性能调优

Java I/O

IO性能常常是应用程序性能瓶颈,优化IO性能就显得极为系要。在进行I0操作时,匿遵循以下原则:尽可能少的访问磁盘;尽可能少的访问底层的操作系统;尽可能少的方法调用;尽可能少处理个别的处理字节和字符。基于以上原则,可以通过以下技巧提高IO速度:

<!--[if !supportLists]-->1、<!--[endif]-->使用缓冲提高I/0性能

常用方法有: a、使用用于字符的BufferedReader和用于字节的BufferInputStream

   b、使用读取方法一次读取一大块数据 

 

<!--[if !supportLists]-->2、<!--[endif]-->InputStreamReader高效,OutpuStreamWriter高效

当使用Unicode字符串时,Writer类的开销比较大。因为它要使Uoicode到字节(byte)的转换。因此,如果可能,在使用Writer类之前就实现转换或用OutputStream类代替Writer类来使用。

 

<!--[if !supportLists]-->3、<!--[endif]-->在适当的时候用byte替代char

1char要用2个字节保存字符,而byte只需要1个,因此用byte保存字符消耗的内存和需要执行的动作指令更少。用byte避免了Unicode转换。

        

<!--[if !supportLists]-->4、<!--[endif]-->尽早释放资源

java 编程过程中,进行数据库连接,I/O 流操作,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销。

 

 

线程使用技巧

<!--[if !supportLists]-->1、<!--[endif]-->在使用大量线程(Treading)的场合使用线程池管理

生成和启动线程是个相对较慢的过程,生成大量的线程会严重影响java程序的性能。

通过使用线程池,有线程管理器来生成新线程或分配现有线程,节省生成线程的时间。

 

2、防止过多的同步

        不必要的同步常常会造成程序性能的下降,调用同步方法比调用非同步方法要花费更多的时间。如果程序是单线程,则没有必要使用同步。

 

3、同步方法而不要同步整个代码段

对某个方法或函数进行同步比对整个代码段进行同步的性能要好。

 

4、在追求速度的场合,用ArrayListHashMap代替VectorHashtable

VectorHashtable实现了同步以提高线程安全性,但速度较没有实现同步的ArrayListHa shMap要慢,可以根据需要选择使用的类。

 

5、使用notify()而不是notifyAll()

使用哪个方法要取决于程序的没计,但应尽可能使用notify(),因为notify()只唤醒等待指定对象的线程,比唤醒所有等待线稃的notifyAll0速度更快。

 

6、不要在循环中调用 synchronized(同步)方法   

方法的同步需要消耗相当大的资料,在一个循环中调用它绝对不是一个好主意。

 

<!--[if !supportLists]-->7、<!--[endif]-->单线程应尽量使用 HashMap, ArrayList

除非必要,否则不推荐使用 HashTable,Vector,她们使用了同步机制,而降低了性能。  

你可能感兴趣的:(java性能)