下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGEPAGE5Java開發(fā)經(jīng)驗總結(jié)論壇系統(tǒng)統(tǒng)一用戶Util.class。publicUtil(){try{if(!LOG_FILES.equals(LOG_FILES_OLD)){LOG_FILE=newFileOutputStream(LOG_FILES,true);}LOG_FILES_OLD=LOG_FILES;LOG_FILE_AD=newFileOutputStream(LOG_FILES_AD,true);}catch(Exceptione){}}錯誤/不合理:打開文件后沒有關(guān)閉,結(jié)果會造成最后打開文件過多的錯誤。此類為靜態(tài)類,可以直接調(diào)用,不用生成類實例,所以此構(gòu)造函數(shù)是不會被調(diào)用。解決方法:將try{}中內(nèi)容放在一個靜態(tài)塊中static{},這樣,在第一次使用此靜態(tài)類是,系統(tǒng)將執(zhí)行此靜態(tài)塊中的內(nèi)容,此后就不會再執(zhí)行了。這樣系統(tǒng)將一直打開此日值文件,減少了打開關(guān)閉文件的開銷。SMSManager.classtry{DBConnectdbc=newDBConnect();Stringsql="SelectCount(id)FrommessageWhereflag=0andissend=1anddelR=0Andincept=?";dbc.prepareStatement(sql);dbc.setBytes(1,userName.getBytes("GBK"));ResultSetrs=dbc.executeQuery();if(rs.next()){smsSign=true;}dbc.close();}catch(Exceptione){e.printStackTrace();}錯誤/不合理:放在try塊中的語句過多,影響性能,應盡量減少try塊中的語句數(shù)。如以下語句應放在try塊外。Stringsql="SelectCount(id)FrommessageWhereflag=0andissend=1anddelR=0Andincept=?";在bjhy.jsp中,try塊過大,更不應將html語句放在其中,這些語句在編譯時都會作為try塊內(nèi)的一部分。同樣,synchronized塊內(nèi)的語句也不應過多,synchronized塊中語句的執(zhí)行速度要比沒有synchronized慢的多。常用的字符串應為靜態(tài)變量,減少實例化String類的開銷,應將Stringsql=“….”改成privatestatocfinalCOUNT_SQL=“…”。一下語句也應將UJBBUName設(shè)為靜態(tài)常量。GCookie.setCookie(response,"UJBBUName",userName,cookieDate);數(shù)據(jù)庫連接有可能不釋放,如果dbc.prepareStatement(sql);報錯,則dbc.close();將不會釋放,應將釋放資源的語句放在finally里。以下是標準數(shù)據(jù)庫釋放語句,其它釋放資源語句類似。publicsynchronizedvoidsaveToDb(){Connectioncon=null;PreparedStatementpstmt=null;try{con=ConnectionManager.getConnection();pstmt=con.prepareStatement(SAVE);pstmt.setString(1,name);pstmt.setString(2,description);pstmt.executeUpdate();}catch(SQLExceptionsqle){sqle.printStackTrace();}finally{try{pstmt.close();}catch(Exceptione){e.printStackTrace();}try{con.close();}catch(Exceptione){e.printStackTrace();}}}net.acai.forum.SkinUtil.GetTopList()case7:sql="selectusername,useremail,userclass,oicq,homePage,article,addDate,userwealthaswealth,userIDfromuserwhereindustry='"+industry+"'orderbyAddDatedesc"; 錯誤/不合理:不要用如此寫sql語句,此語句會因選出過大的結(jié)果集而使系統(tǒng)癱瘓。解決方法:應用各數(shù)據(jù)庫對于分頁的優(yōu)化,商業(yè)數(shù)據(jù)庫對此都有優(yōu)化處理。如oracle可以在where語句中加上rowid>10androwid<30。還可運用java.sql.Statement.setFetchSize(),和java.sql.Statement.setMaxRows()來控制返回的記錄數(shù)。如象mysql這樣對此沒有優(yōu)化的數(shù)據(jù)庫,最好運用緩存(如JCS)技術(shù)。每次select只選出記錄的主鍵(id),如此可減少返回結(jié)果集的大小。再從庫中將查出對應每個id的記錄放入緩存中。下次用戶訪問就會從緩存中讀取數(shù)據(jù)。程序啟動java的堆是一個運行時數(shù)據(jù)區(qū),類的實例(對象)從中分配空間。java虛擬機(jvm)的堆中儲存著正在運行的應用程序所建立的所有對象。程序結(jié)束后這個堆會自動釋放。這是java對內(nèi)存的保護,Java中出現(xiàn)內(nèi)存漏洞的情況會少得多。Java啟動默認的堆大小是64M(linux上是64M,window上是128M),對于一個服務器程序顯然是不夠大的,weblogic啟動要512M的堆。Java在啟動程序是可以設(shè)置最大堆大小,只需要在啟動命令上加上-Xmx<size>參數(shù)即可。如要申請128兆大小的可用一下命令:java–Xmx128Mmainclass另外,啟動程序時,可以通過-verbosegc參數(shù)來檢測JVM垃圾回收情況,通過此可以確定程序需要占用的堆大小。String類String是使用用得最多的類,也是最容易占用系統(tǒng)資源類。以下是關(guān)于使用String的方法總結(jié)。對于常量,一定要用privatestaticfinal如非必要不要用Stringvriable=“”;來初始化一個String對象,直接String或Stringvariable=null即可。更不要用Stringvariable=newString(“”);。多用StringBuffer,而不是String。StringBuffer構(gòu)造對象的開銷比String要小,而且對于字符串的處理比String要快的多。不要向標準輸出寫無用數(shù)據(jù)System.out.println();此語句在程序中隨處可見,都是在調(diào)試時使用的,在程序正式運行時也沒有將其去掉,結(jié)果就是日志中有大量的無用數(shù)據(jù),不僅使得日值不易分析,也增加了系統(tǒng)的開銷。如要記日志可用sun的java.util.logging包,或apache的log4j。不要在循環(huán)中構(gòu)造和釋放對象如net.acai.forum.ForumSearch第475行,語句如下:do{ForumTopictheTopic=newForumTopic();theTopic.setLockTopic(rs.getInt(1));theTopic.setForumID(rs.getInt(2));theTopic.setRootID(rs.getInt(3));theTopic.setAnnounceID(rs.getInt(4));theTopic.setBody(rs.getString(5));theTopic.setExpression(rs.getString(6));theTopic.setTopic(rs.getString(7));theTopic.setUserName(rs.getString(8));theTopic.setChildNum(rs.getInt(9));theTopic.setHits(rs.getInt(10));theTopic.setDateAndTime(rs.getString(11)); searchResult.add(theTopic);i++;if(i==perPage){break;}}while(rs.next());}代碼中ForumTopictheTopic=newForumTopic();可以移到循環(huán)之外,這樣ForumTopic只需實例化一次,減少了開銷。為此,還需將searchResult.add(theTopic);改為searchResult.add(theTopic.clone());其它經(jīng)驗對象回收對象只有在沒有任何引用的情況下,在生命期結(jié)束后才能夠被JVM所回收。當使用對象集合時應特別注意這點,應全面考慮對象在程序中被使用的狀態(tài),有時需要自己手動將對象回收(variable=null即可)。如AWT中,要刪除一個組件對象,如按鈕,除了要考慮從界面中刪除他,還要考慮此組件是否被監(jiān)聽,如監(jiān)聽,則也要從監(jiān)聽器中刪除。大對象應及時回收,不要等到他的生命期結(jié)束后讓系統(tǒng)回收,如果在他的生命期程序要運行很長時間,那么大對象將一直保存在內(nèi)存中,知道生命期結(jié)束。數(shù)據(jù)讀寫數(shù)據(jù)讀寫一定要加緩存,不僅可以大幅度提高讀寫速度,而且可以保證數(shù)據(jù)的完整可靠。用BufferedWriter,BufferedReader,BufferedInputStream,BufferedoutputStream等,如以下代碼:DataInputStreamin=newDataInputStream(newBufferedInputStream(newFileInputStream(fileName))); DataOutpubStreamout=newDataOutpubStream(newBufferedOutputStream(newFileOutputStream(fileName))));盡量使用局部變量調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進一步優(yōu)化。不要重復初始化變量默認情況下,調(diào)用類的構(gòu)造函數(shù)時,Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和double變量設(shè)置成0.0,邏輯值設(shè)置成false。當一個類從另一個類派生時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高錳酸鉀片項目可行性研究報告
- 2024年矽膠豐胸隱形胸罩項目可行性研究報告
- 美國鄉(xiāng)村音樂課程設(shè)計
- 短租協(xié)議書最經(jīng)典十首詩句
- 法學院與法院共建協(xié)議書
- 2024年復方薄荷腦吸搽劑項目可行性研究報告
- 2024至2030年中國雙龍梅花床數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國PET吸塑包裝制品數(shù)據(jù)監(jiān)測研究報告
- 普拉提炫腹課程設(shè)計
- 中國高溫水泥市場發(fā)展規(guī)模與運行策略可行性研究報告(2024-2030版)
- 六年級上冊數(shù)學課件-計算題總復習 (共30張PPT)
- 初中地理《世界的氣候》單元教學設(shè)計以及思維導圖
- 急性腦卒中搶救流程培訓課件
- 幼兒園優(yōu)質(zhì)課件-中班《稻子和麥子》
- 幼兒成長檔案電子通用版
- 進展性腦卒中的診療策略課件
- 寶鋼QBQB4202014熱鍍鋅鋅鐵合金鍍層鋼板及鋼帶
- 簡約表格個人簡歷模板-05
- 短視頻:策劃+拍攝+制作+運營課件(完整版)
- 高速公路質(zhì)量管理手冊
- 護理技能大賽理論題庫(內(nèi)科兒科外科婦產(chǎn)科基礎(chǔ)護理)
評論
0/150
提交評論