修改了一下程序,加强了session的关闭管理发现当内存用了50多M的时候,会发生一次Full GC,使占用的内存下降到30多M看样子似乎控制了一些了,但觉得不应该占用那么多内存啊有经验的高手指点指点?谢谢 ^_^

解决方案 »

  1.   

    利用optimizeit检测项目中几个常用的类的使用状况
      

  2.   

    optimizeit是什么?我是用eclipse开发的唉,第一次Full GC可以压缩到30多M,可是现在Full GC只能压缩到40多M,看来还有些地方内存泄漏没有查到该怎么查呢?
      

  3.   

    optimizeit 工具查漏好用。在网上搜一下好了。
      

  4.   

    你胆子真大,都不会hibernate也敢用???上面的错误就出在你的hibernate,内存也是。
      

  5.   

    咔咔 想学学新东西嘛
    的确不怎么清楚hibernate的运作那就有请eww(fs)指点指点?^_^
      

  6.   

    下载了一个 Borland Optimizeit Suit 6.0 版本的,可是找不到注册码,有谁有么?
      

  7.   

    装好了 Borland Optimizeit Suit 6.0 ,可是找不到地方观察内存的使用情况,是Thread Debugger么?我可以监测线程的运行情况,但没有办法观察内存使用的变化啊
      

  8.   

    摸索了一下,应该是在Progress Tracker 里面查看内存使用情况吧?可是还是不会用…… :(
      

  9.   

    终于知道怎么用了,应该是 profile, 我怎么老喜欢走弯路呢,嘿嘿不过到底怎么用,还要进一步摸索也希望有经验的高手指点一二,谢谢
      

  10.   

    修改了一下程序,学着hibernate文档里面的,独立出一个HibernateUtil.java ,专门管理SessionFactory 和 Session 。没有再出现 WARN : finalizing unclosed session with closed connection可是占用的内存仍然持续增大,不知道怎么样才能查出内存泄漏之处?高手在哪啊?
      

  11.   

    1.你的连接池有问题 改用c3p 连接池.
    2.如果你不期望内存太大,使用Session后,关闭时先clear().[在计算机内存很小的情况下]
    3.jvm 默认提供的内存时16M如果的程序使用的内存大于这个值就会 OutOfMemory.
      所以你有必要加大jvm 的内存 使用参数  -Xms512M  -Xmx1g
    4.在程序中,对象使用后相互之间不要存在引用,jvm 会自己释放内存.
      

  12.   

    谢谢 CAYU(中原) 的解答我原来是用c3p0 连接池的,但经常发生空指针错误,在实在找不到原因的情况下,我改用了dbcp,就没有再发生空指针的问题了不知道用c3p0和用dbcp,有什么不一样的?我运行的默认内存是64M ,其实程序运行所需要的内存是很少的,但感觉是不能完全回收,逐渐积累,才发生oom问题现在就是查不出哪里有问题,更糟糕的是出现了 WARN : unclosed connectionsigh……
      

  13.   

    补充一句,我是用tomcat的,tomcat使用的是dbcp,如果系统用c3p0,就会发生不兼容之类的问题啊?
      

  14.   

    1.connection 在一定的时间后会自动关闭,c3p0 会检测是否已经关闭,如果关闭了就重新得到一个connection ,如果使用其它的连接池,很多都没有对这个进行处理.比如prxool也没有处理这个问题.2.如果你经常发生空指针错误,说明你的程序在处理空指针上有问题,就必须检查你的代码了.3.JVM内存回收时间会比较长的,并不是你使用了,JVM马上就回收,(部分比较临时的对象会马上回收),
    但你从计算机的任务管理器数字上是看不出来的,JVM的回收一般是使用快到你的最大上限才回收.
    比如你是 64M 他会慢慢的用完这64M,感觉快没了的时候才回收.4.hibernate 最好在128M以上.5.写java程序如果老发生内存问题,你可是部分工具检测一下Optimizeit ,profile 都可以,
    在运行一定时间后,你看java 对象,没有释放的,实例对象最多的就是最有可能出现问题的部分.
      

  15.   

    java 组件几乎都是独立的不兼容之类的问题不太可能,除非是weblogic 才有可能.
    dbcp和c3p0都不过是个连接池,要不要,用不用都没什么关系的.用那个更不是问题了。
      

  16.   

    谢谢 CAYU(中原) 的热心指点,解决了我不少疑惑仔细看了一下optimizeit profile的问题分析,消耗内存不正常增长的主要有两个地方,一个是 Xml处理时候的XPath :BaseXPath.selectNodesForContext ;还有一个是hibernate的 Configuration.buildSessionFactory。另外生成xml文件时也很占内存,不过发生次数不多。我想我用hibernate也许还不够正确,有时会发生WARN : unclosed connection
    XPath也不应该发生问题才对唉 不知道哪里不对……继续查……