Goingmm

            BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
            82 隨筆 :: 15 文章 :: 452 評論 :: 0 Trackbacks

           
            申請這個blog很長時間了.一直沒有機會發點帖子(一直想寫點自己的東西,但是沒有能找到合適的主題).今天被同事"嘲笑了一盤".那就來吧,留下點出沒過的痕跡.
                
          小議: J2EE項目 編碼調優

            眼下很多j2ee項目性能不佳的主要瓶頸并不是發生在編碼.但是無謂的系統開銷,糾纏不清,饒來饒去的業務邏輯.這些都是可以避免的.可能每一個程序員都希望自己能寫出高效的,漂亮的代碼吧.至少我是帶著這點想法,開始尋求解決辦法的...
               
           下面的部分內容是針對實際項目中遇到的情況.舉例一些例子,只是為了更好的表達僵硬的描述.

           1) 避免對象的重復創建

            ■ 對象的創建對于系統內存而言是非常昂貴的.在非必要的時候應該避免重復創建對象.需要的時候聲明它,初始化它,不要重復初始化一個對象,盡量
             能做到再使用,而用完后置null有利于垃圾收集。
              
                 比如: request.getSession().removeAttribute("XXXX_XXXX");
                ................................................ ;
               修改: HttpSession obj = request.getSession();
                obj.removeAttribute("XXXX_XXXX");
                ............................... ;
                obj = null;

            ■ 避免方法的非必要重復調用
              比如:
                for(int i=0;i    修改:
                int size = obj.size();
                                    for(int i=0;i

            ■ 讓類實現Cloneable接口,同時采用工廠模式,將減少類的創建,每次都是通過clone()方法來獲得對象。
            ■ 另外使用接口也能減少類的創建
            ■ 對于成員變量的初始化也應盡量避免,特別是在一個類派生另一個類時.

          2)  使用合適的類型
             當原始類型不能滿足我們要求時,使用復雜類型。String和StringBuffer的區別自不必說了,是我們使用最多的類型,在涉及到字符運算時,強烈建議使
            用StringBuffer。在做String匹配時使用intern()代替equal().
            
             +--------------------------------------------------------------
             |  關于 public native String intern() :
             |  返回一個字符串對象的規范表示法。
             |  如果 s 和 t 是 s.equals(t) 類型的字符串,那就保證了 s.intern() == t.intern()
             | 返回:
             |      一個同該字符串內容相同的字符串,但是來自于唯一字符串的緩沖池
             +-----------------------------------------------------------------

          3)  常用容器的選擇
               ArrayList和Vector,HashMap和Hashtable是我們經常用到的類,前者不支持同步,后者支持同步,前者性能更好,大多數情況下選擇前者

          4)  final 的使用
                帶有final修飾符的類是不可派生的, 如果指定一個類為final,則該類所有的方法都是final,Java編譯器會尋找機會內聯所有的final方法,
           這將能夠使性能平均提高50%。類的屬性和方式 使用final或者static修飾符也是有好處的,但是一定要慎用,對他的使用需要做性能和后
           果權衡.
            
             建議InitXxxAction中:需要拿一些parameter的時候可以寫成final的"小方法".
             比如:
            private final WebForward retrieveParam(WebActionMapping mapping,HttpServletRequest request){
                   // TODO....
            }

          5)調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。所以盡量使用局部變量

          6)不要誤用了 異常  
                  異常拋出對性能不利。拋出異常首先要創建一個新的對象。Throwable接口的構造函數調用名為,fillInStackTrace()的本地(Native)
            方法fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。只要有異常被拋出,VM就必須調整調用堆棧,因為在處理過程中創建了一
            個新的對象。異常只能用于錯誤處理,不要試圖用來控制程序流程.

          7)善用調試
                   ■ 代碼中不要留下硬調語句 比如: System.out.println()  
                   ■ 應該選用和配置的調試工具.實施后都應該關閉輸出 比如:log4j
                   ■ 盡量少用串行化、同步操作和耗時昂貴的服務 比如:Date()


            暫時寫下這些吧!第一次寫blog感覺有點累人呢!有什么新的體會再補充...

           

           

           

          posted on 2005-10-09 17:35 Goingmm 閱讀(385) 評論(2)  編輯  收藏 所屬分類: Java

          評論

          # re: J2EE項目 編碼調優 2005-10-09 17:48 Noshoeman
          性感的沙發~~  回復  更多評論
            

          # re: J2EE項目 編碼調優 2005-10-26 10:05 9527
          有些有道理,有些值得商榷......  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 博乐市| 宜丰县| 资阳市| 安阳市| 新竹县| 东海县| 长兴县| 星子县| 睢宁县| 象山县| 桦川县| 格尔木市| 富川| 彭水| 十堰市| 成安县| 临泽县| 南宁市| 赤峰市| 璧山县| 遂平县| 沙湾县| 威海市| 绥江县| 元氏县| 阳谷县| 潼南县| 娱乐| 曲周县| 张北县| 峡江县| 乡城县| 威信县| 温泉县| 府谷县| 论坛| 内丘县| 广宗县| 务川| 灵山县| 安陆市|