有什么办法可以查出内存泄漏(OutOfMemory)发生在什么地方? 修改了一下程序,加强了session的关闭管理发现当内存用了50多M的时候,会发生一次Full GC,使占用的内存下降到30多M看样子似乎控制了一些了,但觉得不应该占用那么多内存啊有经验的高手指点指点?谢谢 ^_^ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 利用optimizeit检测项目中几个常用的类的使用状况 optimizeit是什么?我是用eclipse开发的唉,第一次Full GC可以压缩到30多M,可是现在Full GC只能压缩到40多M,看来还有些地方内存泄漏没有查到该怎么查呢? optimizeit 工具查漏好用。在网上搜一下好了。 你胆子真大,都不会hibernate也敢用???上面的错误就出在你的hibernate,内存也是。 咔咔 想学学新东西嘛的确不怎么清楚hibernate的运作那就有请eww(fs)指点指点?^_^ 下载了一个 Borland Optimizeit Suit 6.0 版本的,可是找不到注册码,有谁有么? 装好了 Borland Optimizeit Suit 6.0 ,可是找不到地方观察内存的使用情况,是Thread Debugger么?我可以监测线程的运行情况,但没有办法观察内存使用的变化啊 摸索了一下,应该是在Progress Tracker 里面查看内存使用情况吧?可是还是不会用…… :( 终于知道怎么用了,应该是 profile, 我怎么老喜欢走弯路呢,嘿嘿不过到底怎么用,还要进一步摸索也希望有经验的高手指点一二,谢谢 修改了一下程序,学着hibernate文档里面的,独立出一个HibernateUtil.java ,专门管理SessionFactory 和 Session 。没有再出现 WARN : finalizing unclosed session with closed connection可是占用的内存仍然持续增大,不知道怎么样才能查出内存泄漏之处?高手在哪啊? 1.你的连接池有问题 改用c3p 连接池.2.如果你不期望内存太大,使用Session后,关闭时先clear().[在计算机内存很小的情况下]3.jvm 默认提供的内存时16M如果的程序使用的内存大于这个值就会 OutOfMemory. 所以你有必要加大jvm 的内存 使用参数 -Xms512M -Xmx1g4.在程序中,对象使用后相互之间不要存在引用,jvm 会自己释放内存. 谢谢 CAYU(中原) 的解答我原来是用c3p0 连接池的,但经常发生空指针错误,在实在找不到原因的情况下,我改用了dbcp,就没有再发生空指针的问题了不知道用c3p0和用dbcp,有什么不一样的?我运行的默认内存是64M ,其实程序运行所需要的内存是很少的,但感觉是不能完全回收,逐渐积累,才发生oom问题现在就是查不出哪里有问题,更糟糕的是出现了 WARN : unclosed connectionsigh…… 补充一句,我是用tomcat的,tomcat使用的是dbcp,如果系统用c3p0,就会发生不兼容之类的问题啊? 1.connection 在一定的时间后会自动关闭,c3p0 会检测是否已经关闭,如果关闭了就重新得到一个connection ,如果使用其它的连接池,很多都没有对这个进行处理.比如prxool也没有处理这个问题.2.如果你经常发生空指针错误,说明你的程序在处理空指针上有问题,就必须检查你的代码了.3.JVM内存回收时间会比较长的,并不是你使用了,JVM马上就回收,(部分比较临时的对象会马上回收),但你从计算机的任务管理器数字上是看不出来的,JVM的回收一般是使用快到你的最大上限才回收.比如你是 64M 他会慢慢的用完这64M,感觉快没了的时候才回收.4.hibernate 最好在128M以上.5.写java程序如果老发生内存问题,你可是部分工具检测一下Optimizeit ,profile 都可以,在运行一定时间后,你看java 对象,没有释放的,实例对象最多的就是最有可能出现问题的部分. java 组件几乎都是独立的不兼容之类的问题不太可能,除非是weblogic 才有可能.dbcp和c3p0都不过是个连接池,要不要,用不用都没什么关系的.用那个更不是问题了。 谢谢 CAYU(中原) 的热心指点,解决了我不少疑惑仔细看了一下optimizeit profile的问题分析,消耗内存不正常增长的主要有两个地方,一个是 Xml处理时候的XPath :BaseXPath.selectNodesForContext ;还有一个是hibernate的 Configuration.buildSessionFactory。另外生成xml文件时也很占内存,不过发生次数不多。我想我用hibernate也许还不够正确,有时会发生WARN : unclosed connectionXPath也不应该发生问题才对唉 不知道哪里不对……继续查…… java.awt 大牛们,救急啊~~~ 正则表达式 怎么取出某一年所有的天数 分太少了,引不起大家注意。追加30问一个简单问题。 请问模态对话框和非模态对话框有什么不同? "安全证书上的名称与站点名称不匹配" 是什么意思? java.text.DateFormat.getDateInstance();格式的问题 我想学Java,谁能推荐一本适合的书呢?谢谢! 用键盘录入数组 用方法遍历 在main 中输出调用方法。 请教下java的异常抛出的用处???? 菜鸟提问
的确不怎么清楚hibernate的运作那就有请eww(fs)指点指点?^_^
2.如果你不期望内存太大,使用Session后,关闭时先clear().[在计算机内存很小的情况下]
3.jvm 默认提供的内存时16M如果的程序使用的内存大于这个值就会 OutOfMemory.
所以你有必要加大jvm 的内存 使用参数 -Xms512M -Xmx1g
4.在程序中,对象使用后相互之间不要存在引用,jvm 会自己释放内存.
但你从计算机的任务管理器数字上是看不出来的,JVM的回收一般是使用快到你的最大上限才回收.
比如你是 64M 他会慢慢的用完这64M,感觉快没了的时候才回收.4.hibernate 最好在128M以上.5.写java程序如果老发生内存问题,你可是部分工具检测一下Optimizeit ,profile 都可以,
在运行一定时间后,你看java 对象,没有释放的,实例对象最多的就是最有可能出现问题的部分.
dbcp和c3p0都不过是个连接池,要不要,用不用都没什么关系的.用那个更不是问题了。
XPath也不应该发生问题才对唉 不知道哪里不对……继续查……