解决方案 »

  1.   

    从异常看是堆溢出,抛开代码看,楼主先设置一下堆大小 -Xms -Xmx 等选项,然后看是否有溢出,如果还有出现那就要通过工具观察一下内存以及问题代码。
      

  2.   


    at spider.HTML.getHtml(HTML.java:159)
    at spider.Control.main(Control.java:59)上面的两行代码是你自己写的吗?如果是查找下问题所在。
      

  3.   

    1. 检查代码是否有问题(比如不停写内容到内存而不释放)
    2. 如果没问题,或者是必须要写入,那就增加JVM堆大小。
      

  4.   

    CloseableHttpResponse response = httpClient.execute(httpGet);  
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode == HttpStatus.SC_OK){  
                    html = EntityUtils.toString(response.getEntity(), "utf-8");     
                    String title=getHtmlTitle(html);
     异常提示的就是这句html = EntityUtils.toString(response.getEntity(), "utf-8");  我是用httpclient请求url获取网页源码,昨天是运行到7000多页的时候报的溢出
      

  5.   

    你确定你程序没有内存泄露的错误?
    你确定给Java分配了足够的内存?用-Xmx手动设置一下堆大小吧,看是否还溢出。
    如果还溢出那只能说明你的内存太小了不能满足程序要求,这是硬伤没办法,可以考虑增加虚拟内存
      

  6.   

    CloseableHttpResponse response = httpClient.execute(httpGet);  
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode == HttpStatus.SC_OK){  
                    html = EntityUtils.toString(response.getEntity(), "utf-8");     
                    String title=getHtmlTitle(html);
     异常提示的就是这句html = EntityUtils.toString(response.getEntity(), "utf-8");  我是用httpclient请求url获取网页源码,昨天是运行到7000多页的时候报的溢出 html = EntityUtils.toString(response.getEntity(), "utf-8");
    字符串是有长度的,一般这种不可预知长度的字符数据,还是改用流操作。如果还是太大,建议进一步考虑缓存啥的。
      

  7.   

    CloseableHttpResponse response = httpClient.execute(httpGet);  
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode == HttpStatus.SC_OK){  
                    html = EntityUtils.toString(response.getEntity(), "utf-8");     
                    String title=getHtmlTitle(html);
     异常提示的就是这句html = EntityUtils.toString(response.getEntity(), "utf-8");  我是用httpclient请求url获取网页源码,昨天是运行到7000多页的时候报的溢出 html = EntityUtils.toString(response.getEntity(), "utf-8");
    字符串是有长度的,一般这种不可预知长度的字符数据,还是改用流操作。如果还是太大,建议进一步考虑缓存啥的。
    具体应该怎么用流操作呢,不太会用那个,能否给个示例
      

  8.   

    具体应该怎么用流操作呢,不太会用那个,能否给个示例
    不过,HttpEntity获取流用getContent()的方法。
    HttpEntity tmpEntity = response.getEntity();
    InputStream stream = tmpEntity.getContent();后面的流怎么玩,自己去找例子,我懒惰下,
      

  9.   

    用java自带的分析工具,看看用需要多大的对内存,设置 vm 的参数,或者看自己的代码是不是可以改进.