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

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

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

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

从根本上来说,内存的混乱是一个程序的架构问题,而不仅仅是应用服务器参数调整的问题.
5 楼 murainwood 2009-03-12  
sdh5724 写道
古巴的伟大战士, 后来死在非州的某小国的革命?

似乎他没去过非洲
6 楼 nanzhou 2009-03-12  
去过的,去的刚果。

切·格瓦拉死在玻利维亚
7 楼 heavener 2009-03-12  
大家在做优化tomcat的时候一般都用什么方法?能不能收集一下形成一个规范?
请问一下如果程序中用递归是不是很容易造成java heap space