论坛首页 Java企业应用论坛

关于分配jvm heap内存堆大小的问题

浏览 4937 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-02  

   在解决jvm超出堆内存大小的java.lang.OutOfMemoryError: Java heap space错误时,我从网上搜的解决解决方案,借助jconsole成功解决。我按照网友的方案将heap堆内存(最小)分配为512m。在使用jconsole监控整个流程发现: 在很长一段时间jvm占用内存在300m左右。我没有修改的时候,分配的内存也就6M左右,占用内存经常徘徊在4.8M左右,程序也能正常运行。经过我分析,应该和jvm的gc回收机制有关吧。当jvm使用内存达到分配内存的一个百分比之后,进行垃圾回收。由此可见,并不是给jvm分配的heap堆内存越大越好。

   发表时间:2009-03-11  
heap堆内存大至少可以减少 gc 的次数。
0 请登录后投票
   发表时间:2009-03-11  
Java的GC收集,一直是程序设计的一大弊端.
从源头上来说,Java有一个理念,万事万物皆对象.于是在Java里面,几乎所有的东西都用对象来表示,尤其是字符串也用对象来表示,而且是用不可修改的字符串来表示.于是每次字符串的修改,都会引起内存的再分配过程.
Java里面的垃圾多,根本原因是没必要的对象太多.这些对象一会儿活过来,一会儿又死过去,最后应用程序就不断在创造垃圾,然后回收这些垃圾.
要解决这个问题,有一个很简单的方案.
其一,减少类的数量,别搞那么多空架子的类出来,尤其是接口和抽象类.
其二.把访问比较少的类,直接定义成static的,这样只会生成一个实例,既不需要创建,也不需要收集,内存的使用就稳定了.

从根本上来说,内存的混乱是一个程序的架构问题,而不仅仅是应用服务器参数调整的问题.
0 请登录后投票
   发表时间:2009-03-12  
大家在做优化tomcat的时候一般都用什么方法?能不能收集一下形成一个规范?
请问一下如果程序中用递归是不是很容易造成java heap space
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics