作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] Java heap space (已爬文)
时间Mon Nov 23 12:08:26 2009
※ 引述《killeryagami (kira)》之铭言:
: 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的问题,目前怀疑是这部份的程式码
怀疑?
炸掉的时候会丢出一个 Exception,会告诉你炸在哪里
(ㄜ... 补充:通常是递回传到爆炸)
: 在程式离开这个method之後,htmlcode是否会立即被回收(释放空间)?
简单一个概念,有被 reference 到的都不会被回收
再者,没有被 reference 到的,也不一定是「立即」回收
另外,字串又有字串会发生的事情....
抓网页抓到记忆体爆炸... 我还没发生过...
一个网页(纯 html 码)能超过 1MB 就算厉害了
(一般使用者会先哭吧?)
除非你在一些很特别的平台上工作
不然,我的经验是,根本不用调整也能正常运作
: 又例如
: String htmlcode = getPageHtml(url_1);
: htmlcode = getPageHtml(url_2);
: 那麽JVM中原本储存的700行url_1的资料,是不是不会被马上释放?
: 最近对於节省记忆体有点头大,希望各位多多指教 m(_ _)m
--
侃侃长论鲜窒碍 首页:
http://www.psmonkey.idv.tw
众目睽睽无心颤 Blog:
http://ps-think.blogspot.com
茕居少聊常人事
杀头容易告白难 欢迎参观 Java 版(@ptt.cc) \囧/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.20.185.241