浏览 4937 次
锁定老帖子 主题:关于分配jvm heap内存堆大小的问题
精华帖 (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堆内存越大越好。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-11
heap堆内存大至少可以减少 gc 的次数。
|
|
返回顶楼 | |
发表时间:2009-03-11
Java的GC收集,一直是程序设计的一大弊端.
从源头上来说,Java有一个理念,万事万物皆对象.于是在Java里面,几乎所有的东西都用对象来表示,尤其是字符串也用对象来表示,而且是用不可修改的字符串来表示.于是每次字符串的修改,都会引起内存的再分配过程. Java里面的垃圾多,根本原因是没必要的对象太多.这些对象一会儿活过来,一会儿又死过去,最后应用程序就不断在创造垃圾,然后回收这些垃圾. 要解决这个问题,有一个很简单的方案. 其一,减少类的数量,别搞那么多空架子的类出来,尤其是接口和抽象类. 其二.把访问比较少的类,直接定义成static的,这样只会生成一个实例,既不需要创建,也不需要收集,内存的使用就稳定了. 从根本上来说,内存的混乱是一个程序的架构问题,而不仅仅是应用服务器参数调整的问题. |
|
返回顶楼 | |
发表时间:2009-03-12
大家在做优化tomcat的时候一般都用什么方法?能不能收集一下形成一个规范?
请问一下如果程序中用递归是不是很容易造成java heap space |
|
返回顶楼 | |