在Spring + hibernate 的web应用程序中,我连续做几次批量的操作,在jdk1.6自带的jconsole控制台中监控到内存一直在增加,而未被回收,一开始以为是没有到回收的时间,可过了一个晚上的时间,内存始终在150M左右,没有被回收的迹象,一晚上hibernate Session已经失效,session中的对象应该都被释放了。。最初我jvm的虚拟内存设为 300M,我把jvm的虚拟内存设成250M(200Mtomcat就启动不起来了)也内存也未被回收。如果每天做批量错做,内存肯定会泄露。这问题该怎么解决呢???我在每次执行完saveOrUpdate后执行session.flush(),session.clear();连续执行批量操作内存使用虽然没有一直增加,在上下波动的状态,但也没有被回收。我手动的执行System.gc(),内存即会下降。到底是什么原因会导致内存没有被垃圾回收器回收呢??
解决方案 »
- java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
- hibernate3.6.0 @GeneratedValue 不能自动递增,我擦!
- jsp显示中文正常,察看源文件里中文全是类似完的字符
- spring hibernate 多数据源实现
- 提示weblogic配置信息过时???
- 关于<html:checkbox>返回值的问题
- 问个宏观的问题
- 我感觉hibernate设计失败的地方!
- 请教大家这是EJB的什么错误?
- JPA通过外键查询时报错:could not resolve property
- 请教下struts2里action的异常处理问题
- 请教一下这个图是用什么图画的
如果偶尔调查用 System.gc()可以解决,那也是可以的
因为java 回收内存确实不是实时的
但是我的问题比楼主的简单,我的问题就是有一个类不停被实例化,并存放至缓存而导致JVM无法回收对象,从而导致内存溢出。
但楼主的就有点怪异了,显然是内存溢出,但“我手动的执行System.gc(),内存即会下降。”,这说明这些对象在强制执行垃圾回收时,引用被释放了,因此导致对象可以回收吧。但问题的解决还得靠Jprofile了。
关注一下奇怪之现象