<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>qdchen</title>
    <description></description>
    <link>http://qdchen.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Java heap space出错原因</title>
        <author>qdchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qdchen.javaeye.com">qdchen</a>&nbsp;
          链接：<a href="http://qdchen.javaeye.com/blog/161028" style="color:red;">http://qdchen.javaeye.com/blog/161028</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用Java程序从数据库中查询大量的数据时容易出现异常:<br />java.lang.OutOfMemoryError: Java heap space <br />在JVM中如果98％的时间是用于GC且可用的 Heap size 不足2％的时候将抛出此异常信息。<br />还有使用jxl读写excel文件时，同时读入所有记录，也容易出现这个问题。<br />JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值，其初始空间(即-Xms)是物理内存的1/64，最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。<br />例如：java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar<br />如果Heap Size设置偏小，除了这些异常信息外，还会发现程序的响应速度变慢了。GC占用了更多的时间，而应用分配到的执行时间较少。<br />Heap Size 最大不要超过可用物理内存的80％，一般的要将-Xms和-Xmx选项设置为相同，而-Xmn为1/4的-Xmx值。<br />Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap ”。<br />解决办法：<br />java程序<br />java -Xms32m -Xmx800m className<br />就是在执行JAVA类文件时加上这个参数，其中className是需要执行的全路径类名。<br />用Eclispe 在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m。<br />tomcat<br />windows 更改系统环境变量<br />加上JAVA_OPTS=-Xms64m -Xmx512m<br />Linux  在{tomcat_home}/bin/catalina.sh的前面，加 <br />set JAVA_OPTS='-Xms64 -Xmx512' <br />原因<br />（1）不要试图去假定垃圾收集发生的时间，这一切都是未知的。方法中的一个临时对象在方法调用完毕后就变成了无用对象，这个时候它占用的内存就可以被释放。<br /><br />　　（2）Java中提供了一些和垃圾收集打交道的类，而且提供了一种强行执行垃圾收集的方法--调用System.gc()，但这同样是个不确定的方法，很可能各个平台的实现或不同种类的JDK实现不会相同。Java 中并不保证每次调用该方法就一定能够启动垃圾收集，它只不过会向JVM发出这样一个申请，到底是否真正执行垃圾收集，一切都是个未知数。<br /><br />　　（3）挑选适合自己的垃圾收集器和算法。如果系统没有特殊和苛刻的性能要求，可以采用JVM的缺省选项。否则可以考虑使用有针对性的垃圾收集器，比如增量收集器就比较适合实时性要求较高的系统之中。系统具有较高的配置，有比较多的闲置资源，可以考虑使用并行标记/清除收集器。<br /><br />　　（4）关键的也是难把握的问题是内存泄漏。良好的编程习惯和严谨的编程态度永远是最重要的，不要让自己的一个小错误导致内存出现大漏洞。设计的时候，应该考虑这个问题，不应等程序写好后，再去优化程序，这样耗时会更多。<br /><br />　　（5）尽早释放无用对象的引用。大多数程序员在使用临时变量的时候，都是让引用变量在退出活动域(scope)后，自动设置为null，暗示垃圾收集器来收集该对象，防止发生内存泄露。<br /><br />,对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用，最好使用finallize强制执行或者写自己的finallize方法。
          <br/>
          <span style="color:red;">
            <a href="http://qdchen.javaeye.com/blog/161028#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 16:23:54 +0800</pubDate>
        <link>http://qdchen.javaeye.com/blog/161028</link>
        <guid>http://qdchen.javaeye.com/blog/161028</guid>
      </item>
      <item>
        <title>我的博客今天开通</title>
        <author>qdchen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://qdchen.javaeye.com">qdchen</a>&nbsp;
          链接：<a href="http://qdchen.javaeye.com/blog/142300" style="color:red;">http://qdchen.javaeye.com/blog/142300</a>&nbsp;
          发表时间: 2007年11月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我的博客今天终于开通了
          <br/>
          <span style="color:red;">
            <a href="http://qdchen.javaeye.com/blog/142300#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 Nov 2007 14:04:24 +0800</pubDate>
        <link>http://qdchen.javaeye.com/blog/142300</link>
        <guid>http://qdchen.javaeye.com/blog/142300</guid>
      </item>
  </channel>
</rss>