作者killeryagami (kira)
看板java
標題[問題] Java heap space (已爬文)
時間Mon Nov 23 11:48:43 2009
JVM能吃的Memory有限,所以我有幾個問題想請教各位神人
平常在程式撰寫的時候,都用什麼方式節省記憶體?
再者是我的一部份程式碼,用途是讀取頁面原始碼
public String getHtmlCode(String url,String encode)throws IOException{
StringBuffer sb = new StringBuffer();
if(checkUrl(url)){ //這個地方是判斷是不是我要的網頁
try {
toConnection(url);
br = new BufferedReader(new InputStreamReader(urlConn.
getInputStream(), encode));
int count = 0;
String line = "";
while ((line = br.readLine()) != null && count<= 700 ) {
//為了不讓資料過大,所以只讀取700行的原始碼
sb.append(line.intern());
count++;
}
br.close();
toDisconnect();
} catch (Exception e) {
System.out.println("Paser: " + e);
}
this.htmlcode = sb.toString();
}
return this.htmlcode;
}
我的Project出現Java heap space的問題,目前懷疑是這部份的程式碼
在程式離開這個method之後,htmlcode是否會立即被回收(釋放空間)?
又例如
String htmlcode = getPageHtml(url_1);
htmlcode = getPageHtml(url_2);
那麼JVM中原本儲存的700行url_1的資料,是不是不會被馬上釋放?
最近對於節省記憶體有點頭大,希望各位多多指教 m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.18.52
→ killeryagami:額外資訊:Project需要Crawler至少30萬筆以上網頁 11/23 11:51
→ xlk:htmlcode是field,Class活多久field就活多久,若是30萬個class.. 11/23 13:59
→ xlk:更何況沒有人說一行一定要多少字元! 11/23 14:02
→ killeryagami:當Class不再被用到的時候就會準備回收嗎? 11/23 14:56
→ MonyemLi:不是多執行序的話 StringBuffer 可以拉出去外面共用 11/23 17:26
→ TonyQ:我還是認為先找出問題源頭再來作診斷,不要瞎作. 11/23 17:58
推 slalala:適時的將用不到的物件指向null 看看 11/23 20:46
推 NightPrince:不能用資料庫嗎? 11/23 23:21