IT神童

          java,net,php技術研究神童

          讓Java代碼跑得更快

          本文簡單介紹一下在寫代碼過程中用到的一些讓JAVA代碼更高效的技巧。

          1,將一些系統資源放在池中,如數據庫連接,線程等.在standalone的應用中,數據庫連接池可以使用一些開源的連接池實現,如C3P0,proxool和DBCP等,在運行在容器中的應用這可以使用服務器提供的DataSource.線程池可以使用JDK本身就提供的java.util.concurrent.ExecutorService.

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

          2,減少網絡開銷,在和數據庫或者遠程服務交互的時候,盡量將多次調用合并到一次調用中。

          3,將經常訪問的外部資源cache到內存中,簡單的可以使用static的hashmap在應用啟動的時候加載,也可以使用一些開源的cache框架,如OSCache和Ehcache等.和資源的同步可以考慮定期輪詢和外部資源更新時候主動通知.或者在自己寫的代碼中留出接口(命令方式或者界面方式)共手動同步。

          4,優化IO操作,JAVA操作文件的時候分InputStream and OutputStream,Reader and Writer兩類,stream的方式要快,后者主要是為了操作字符而用的,在字符僅僅是ASCII的時候可以用stream的方式提高效率.JDK1.4之后的nio比io的效率更好。java教程下載

          1. OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/temp/test.txt")));              
          2. out.write("abcde".getBytes());        
          3. out.flush();  
          4. out.close(); 

          利用BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter減少對磁盤的直接訪問次數。

          1. FileReader fr = new FileReader(f);  
          2. BufferedReader br = new BufferedReader(fr);  
          3. while (br.readLine() != null) count++; 

          5不要頻繁的new對象,對于在整個應用中只需要存在一個實例的類使用單例模式.對于String的連接操作,使用StringBuffer或者StringBuilder.對于utility類型的類通過靜態方法來訪問。

          6,避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。

          7,對性能的考慮要在系統分析和設計之初就要考慮。

          總之,一個系統運行時的性能,無非是從CPU,Memory和IO這三個主要方面來考慮優化.減少不必要的CPU消耗,減少不必要的IO操作,增加Memory利用效率。

          posted on 2012-08-23 14:42 IT神童 閱讀(549) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 枣强县| 林甸县| 浏阳市| 晋州市| 札达县| 德阳市| 措勤县| 普定县| 米林县| 织金县| 札达县| 武山县| 镇赉县| 阜南县| 通山县| 渑池县| 大石桥市| 永定县| 清水河县| 宁城县| 墨竹工卡县| 麦盖提县| 金阳县| 和硕县| 区。| 上高县| 文化| 广安市| 汽车| 浙江省| 福贡县| 大丰市| 武功县| 汾西县| 雷州市| 金川县| 新竹县| 四平市| 遂昌县| 霍山县| 吕梁市|