让JAVA代码跑得更快

 

  本文简单介绍一下在写代码过程中用到的一些让JAVA代码更高效的技巧.

1.   将一些系统资源放在池中(如数据库连接, 线程等)

    在standalone的应用中, 数据库连接池可以使用一些开源的连接池实现, 如C3P0, proxool DBCP,运行在容器中的应用可以使用服务器提供的DataSource.线程池可以使用JDK本身就提供的java.util.concurrent.ExecutorService.

 

 1 import java.util.concurrent.Executors;  
 2 
 3 import java.util.concurrent.ExecutorService;  
 4 
 5 public class JavaThreadPool {  
 6 
 7      public static void main(String[] args) {  
 8 
 9      ExecutorService pool = Executors.newFixedThreadPool(2);  
10 
11       
12 
13      Thread t1 = new MyThread();  
14 
15      Thread t2 = new MyThread();  
16 
17      Thread t3 = new MyThread();  
18 
19      Thread t4 = new MyThread();  
20 
21      Thread t5 = new MyThread();  
22 
23   
24 
25      pool.execute(t1);  
26 
27      pool.execute(t2);  
28 
29      pool.execute(t3);  
30 
31      pool.execute(t4);  
32 
33   
34 
35      pool.shutdown();  
36 
37      }  
38 
39 }  
1 class MyThread extends Thread {  
2 
3      public void run() {  
4 
5      System.out.println(Thread.currentThread().getName() + "running....");  
6 
7      }  
8 
9 }  

 

2.  减少网络开销(在和数据库或者远程服务交互的时候, 尽量将多次调用合并到一次调用中)

3.  将经常访问的外部资源cache到内存中

      简单的可以使用statichashmap在应用启动的时候加载, 也可以使用一些开源的cache框架, 如OSCacheEhcache. 和资源的同步可以考虑定期轮询和外部资源更新时候主动通知; 或者在自己写的代码中留出接口(命令方式或者界面方式)共手动同步.

 

4.   优化IO操作

           JAVA操作文件的时候分InputStream and OutputStream, Reader and Writer两类, stream的方式要快, 后者主要是为了操作字符而用的, 在字符仅仅是ASCII的时候可以用stream的方式提高效率.

           JDK1.4之后的nioio的效率更好.

           OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/test.txt")));              

           out.write("abcd".getBytes());        

       out.flush();  

       out.close();  

      利用BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter减少对磁盘的直接访问次数.

     FileReader fr = new FileReader(f);  

       BufferedReader br = new BufferedReader(fr);  

       while (br.readLine() != null) count++;  

 

5.   不要频繁的new对象, 对于在整个应用中只需要存在一个实例的类使用单例模式.

6.   对于String的连接操作, 使用StringBuffer或者StringBuilder.

7.   对于utility类型的类通过静态方法来访问.

       避免使用错误的方式, Exception可以控制方法推出, 但是Exception要保留stacktrace消耗性能, 除非必要, 不要使用instanceof做条件判断, 尽量使用比的条件判断方式.

 

8. 使用JAVA中效率高的类,比如ArrayListVector性能好.

 

9. 对性能的考虑要在系统分析和设计之初就要考虑.

 

    总之, 一个系统运行时的性能, 无非是从CPU、 MemoryIO这三个主要方面来考虑优化. 减少不必要的CPU消耗, 减少不必要的IO操作, 增加Memory利用效率.

 

posted on 2016-01-12 11:52  快跑的小鸡  阅读(727)  评论(0编辑  收藏  举报

导航