关于OutOfMemoryError: Java heap space的备忘

       在运行Java程序的时候,经常会碰到Heap错误,杯具的我也遇到了。这里为大家提供一些思路和个人看法。

      该错误的核心就是:Java运行时堆栈容量<程序需要分配堆栈容量

      可以看到,为了保证小于号变成大于号即Java运行时堆栈容量>程序需要分配堆栈容量,以保证程序正常运行,就可以一方面增加Java运行时堆栈容量,另一方面减小程序需要的堆栈容量。

      1. 对于增加Java运行时堆栈容量,网上较多的方法就是可以修改JVM的一些配置,这些可以在eclipse.ini中修改,这里我修改的部分信息如下:

       

-Xms800m
-Xmx800m
-XX:PermSize=256m
-XX:MaxPerSize=512m
-Xmn256m
-XX:+DisableExplicitGC
     2. 对于减小程序需要的堆栈容量。这里需要减少执行时的临时变量,如果当个方法中的临时变量过多,那就可以进行拆分;同时为了避免新对象的产生,有的地方可以直接上表达式,不用临时生成变量保存即可

     补充说明:

         1.   xms和xmx一般不超过可用物理内容的1/4,此外xms不大于xmx。对各个参数的说明可以详见如下地址http://www.360doc.com/content/12/1215/16/1934460_254197093.shtml

    http://www.360doc.com/content/08/0718/15/12985_1443514.shtml

         2.    有很多文章说运行参数在ecplise的ini里面设置无效,应该在run->run configuration..中设置

         3.   本人的这个java程序先运行在win64位机器上(环境是ecplise+JDK1.5)一直不行,后来放到win32上跑发现程序居然运行正常,个人强烈怀疑是64位系统回收内存的问题,对此,我突发奇想,既然是系统问题,那就用360优化,指不定有用,结果执行后发现JVM占用空间果然减小不少

         具体里面JVM如何分配堆栈空间,如何优化执行来减小内存占用提高效率,具体的应该要看看JVM虚拟机相关的东西了,留着以后深究。

你可能感兴趣的:(关于OutOfMemoryError: Java heap space的备忘)