分享

JVM heap

 banpaia 2010-08-05
 在解决jvm超出堆内存大小的java.lang.OutOfMemoryError: Java heap space错误时,我从网上搜的解决解决方案,借助jconsole成功解决。我按照网友的方案将heap堆内存(最小)分配为512m。在使用jconsole监控整个流程发现: 在很长一段时间jvm占用内存在300m左右。我没有修改的时候,分配的内存也就6M左右,占用内存经常徘徊在4.8M左右,程序也能正常运行。经过我分析,应该和jvm的gc回收机制有关吧。当jvm使用内存达到分配内存的一个百分比之后,进行垃圾回收。由此可见,并不是给jvm分配的heap堆内存越大越好。
 
 
-----
Java的GC收集,一直是程序设计的一大弊端.
从源头上来说,Java有一个理念,万事万物皆对象.于是在Java里面,几乎所有的东西都用对象来表示,尤其是字符串也用对象来表示,而且是用不可修改的字符串来表示.于是每次字符串的修改,都会引起内存的再分配过程.
Java里面的垃圾多,根本原因是没必要的对象太多.这些对象一会儿活过来,一会儿又死过去,最后应用程序就不断在创造垃圾,然后回收这些垃圾.
要解决这个问题,有一个很简单的方案.
其一,减少类的数量,别搞那么多空架子的类出来,尤其是接口和抽象类.
其二.把访问比较少的类,直接定义成static的,这样只会生成一个实例,既不需要创建,也不需要收集,内存的使用就稳定了.

从根本上来说,内存的混乱是一个程序的架构问题,而不仅仅是应用服务器参数调整的问题.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多