在做項目的時候JSP在運行的時候出現了一些問題現將我的問題解決方法做一個小結供以後作項目的參考
問題
weblogic 的數據庫連接數目在程序運行中不斷增長最後連接數目超過最大數導致weblogic服務關閉
原因
在操作完數據庫後沒有關閉數據庫連接或者是返回結果集(Resultset)而無法在JSP中關閉數據庫連接
解決方法
.在操作完數據庫要關閉數據庫連接
.盡量不要返回結果集Resultset 可以返回Vector(一個字段)Hashtable(多個字段)這樣可以在javabean中關閉數據庫
.如果javabean中返回的是結果集(Resultset)也可以在javaBean中寫一個connectDB(連接數據庫)closeDB(關閉數據庫)的方法然後jsp裡面調用connectDB()建立數據庫連接同時就可以對數據庫進行操作了操作數據庫完畢可以通過closeDB() 來關閉數據庫
問題
在運行某一個JSP程序的時候weblogic 的內存陡然增長而且居高不下最終導致weblogic 內存不足甚至宕機
原因
過度使用內存
解決方法
.由於數據量比較大在對字符串進行操作的時候使用 + 進行字符串連接而相信大家對String都非常熟悉我們也經常要用它來做字符串的連接什麼的例如
String a =b+c file://bc 都是String
但是在實際的編譯中卻是這樣
String a=new StringBuffer()append(b)append(c)toString()
顯然在一個簡單的語句中卻意外的多生成了個對象
StringBuffer()
toString返回的一個String
我們比較一下這兩段程序的性能
程序片斷一
StringBuffer s=new StringBuffer();
long start = SystemcurrentTimeMillis();
for (int i=;i<;i++){
s+=a;
}
long stop = SystemcurrentTimeMillis();
Systemoutprintln(stopstart);
程序片斷二
StringBuffer s=new StringBuffer();//
long start=SystemcurrentTimeMillis();
for (int i=;i<;i++){
sappend(a);
}
long stop=SystemcurrentTimeMillis();
Systemoutprintln(stopstart);
比較一下結果差距很明顯
至於為什麼String的連接這麼做因為String無法直接改變其長度而必須采用StringBuffer的用法
因此建議使用StringBuffer 的append 方法來進行字符串相連
.在解決這個問題的時候我也嘗試使用上面的方法效果並不是很明顯(消耗內存上)後來在顯示大量數據的時候避免字符串相連的步驟而直接使用outprintln()直接輸出
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26440.html