这个问题好像已经被公认了,你可以百度下.确实存在,web应用的重加载确实有内存泄露,
尤其是在类的内部使用static内部类,更为严重,以前看金蝶中间件的高人有文章阐述过.

解决方案 »

  1.   

    看了网上的很多都是说的时spring的问题,基本上没有说道hibernate的问题
      

  2.   

    我认为是J2EE容器的问题,你可以换个容器试试.
      

  3.   

    是开发的时候的问题吗?每次reload都内存泄漏?
      

  4.   

    只测试过tomcat和weblogic8,weblogic9
    都有类似问题,
    每次reload内存都不断增加,直到最大值就out of memory我观察过,每次reload到生成sessionFactory那步后,内存就增加10mb,但是close掉sessionFactory,并且执行sessionFactory=null,内存也不会减少,说明close掉sessionFactory内存也不会释放另外还有别的内存问题,应该时spring加载application.xml中那些类没有释放,看了网上的一些解决方案,加了spring的一个listener,也没有解决,现在真是被这些东西搞烦了.
      

  5.   

    不认为是 hibernate 的问题 !  
      

  6.   

    也不知道为啥,自从使用hiebrnate(注:没有用spring),reload次数多了,就会经常out of memory.
    希望楼主加分,以吸引更多的人来讨论一下,密切关注此问题。
      

  7.   

    为什么要reload呢,写个小程序负责重启不就完了吗,就是启动个批处理而已,再说那个程序成天重启啊,除非有问题,这也是虽然有问题但是厂商们不关注的原因。
      

  8.   


    reload而不是重启服务器有两个原因,
    第一:在调试阶段,reload比重启服务器要快一些,调试的时候经常更新类是很正常的,每更新一次都会reload,如果是重启服务器很浪费时间第二:在发布使用以后,如果每次更新都要重启服务器会造成一些问题,比如这个服务器上并不只是你一个运用,有很多运用,如果就因为你一个运用就重启服务器,其它运用都会受影响.
      

  9.   

    这点也是让我很疑惑的地方,hibernate现在应该也是个很成熟的框架了,为什么会有这种问题,按道理,生成sessionFactory的时候,hibernate会把所有配置的po加载进类存,关掉sessionFactory的时候,应该要释放这些内存才对,但是根据我的观察,每次关掉sessionFactory的时候内存都没有释放,内存占用一点都没有减少,真是急切盼望能解决这个问题!
      

  10.   

    我想会不会是因为别的地方引用了sessionFactory造成的,
    我是用struts的插件在运用启动的时候初始化sessionFactory的,
    然后在实际运用的时候,自己写了一个HibernateUtil类,类中也声明了一个sessionFactory的静态变量,这个静态变量重context中取值,也就是在hibernate的配置文件中配置的hibernate-connection-session-factory,实际上也就是在插件中初始化的那个sessionFactory,
    会不会是这个地方也有对它的引用,造成内存没有释放?
      

  11.   

    如果仅仅reload,应该不是很大的问题,隔三岔五的重启一下tomcat就好。当然能查还是查一下,不能就算了。
      

  12.   


    但现在问题不是这样,tomcat只是本机调试的时候用的,实际生产中用的是weblogic8(和tomcat存在同样的问题),而且生产系统是要7*24运作的,隔三岔五的重启一下会让产线的人叫嚷,客户会不满意的.国庆我都在研究这个问题,准备用jprobe查一下.
      

  13.   

    看了网上的一些资料,服务器redeploy的确普遍存在内存泄露的问题。
      

  14.   

    我也遇到过这样的问题
    是struts+hibernate,很小的程序,在测试的时候就出现这样的问题
      

  15.   

    应该是 spring的问题吧
    使用spring的防治内存溢出的 filter就好了
      

  16.   

    session 不关 当然会有这样的问题了 使用 Awake框架吧 不会出现这样的问题
      

  17.   


    我在最开始都说明了,没有用通常的那种spring的方式和hibernate结合,是自己做了一个插件在struts中初始化hibernate的,hibernate的配置文件还是用的hibernate的配置文件。另外spring的内存溢出那是另外一回事了,我在项目中把spring的配置文件都去掉了,还是一样的有上面说的内存溢出的问题。这说明这个溢出和spring没有关系。
      

  18.   

    不运行任何查询,只是redeploy都会出现内存溢出,所以跟session无关。 
      

  19.   


    另外现在看到论坛上很多回复别人的帖子都是直接就说用Awake框架,似乎Awake包治百病一样,广告味太重。