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神童 閱讀(545) 評論(0)  編輯  收藏


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


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

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁城县| 绍兴县| 莒南县| 加查县| 民乐县| 富宁县| 扬州市| 霸州市| 寿光市| 拉孜县| 民乐县| 娄烦县| 侯马市| 儋州市| 南溪县| 宣威市| 蓬溪县| 施秉县| 天峨县| 云阳县| 梅州市| 应城市| 永泰县| 娄烦县| 石嘴山市| 凤冈县| 偃师市| 高碑店市| 东乡| 祁门县| 临夏市| 定南县| 冷水江市| 庄河市| 揭阳市| 堆龙德庆县| 大足县| 玛沁县| 松桃| 六枝特区| 黎川县|