论坛首页 Java版

Hibernate的内存问题

浏览 500 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-11-01 关键字: hibernate synchronizer 内存

   这段时间写了个struts+hibernate的demo,Struts是1.3版的,Hibernate用的是Hibernate Synchronizer工具。Hibernate Synchronizer生成的代码真是不错:从数据库脚本到生成DAO层,只需要不到10分钟的时间,一个爽字了得。然后拷贝个struts模板,改改里面的Action参数,加个forward也就可以了。

   程序运行是没问题,但是突然发现另外一个严重的问题,就是Tomcat的内存问题。

        下面是_RootDAO虚类里面实现的static方法,所有的其他DAO都是继承这个_RootDAO虚类,所以要使用的时侯,只需要用过_RootDAO.initialize()方法完成配置和SessionFactory生成工作。

  1. public static void initialize () throws HibernateException {   
  2.     Configuration cfg = new Configuration();   
  3.     cfg.configure();   
  4.     sessionFactory = cfg.buildSessionFactory();   
  5. }  

   在Action的execute()方法中使用继承了_RootDAO的UserinfoDAO类。下面注释的代码是为了调试,看是否只调用SessionFactory就会产生内存增高的现象。

  1. _RootDAO.initialize();   
  2.            
  3. /*        
  4.         UserinfoDAO userinfoDAO = new UserinfoDAO();  
  5.         List list = userinfoDAO.find("from Userinfo");  
  6.           
  7.         String forwardstr = "failure";  
  8.         Iterator itr = list.iterator();  
  9.           
  10.         while(itr.hasNext())  
  11.         {  
  12.             Userinfo userinfo = (Userinfo)itr.next();  
  13.               
  14.               
  15.             if(loginForm.getUserid().equals(userinfo.getUserId()) && loginForm.getPassword().equals(userinfo.getPassword()))  
  16.             {  
  17.                 forwardstr = "success";  
  18.                 break;  
  19.             }  
  20.         }*/  

   实际情况也的确如此,即使只是用_RootDAO.intialize()方法,都会出现内存无法释放的现象。

   而后我将intialize()方法中的buildSessionFactory()方法注释掉,发现仍然是有这种现象。还没弄明白,先记录下来,等想通了,再补上。

   下面是在网上面找到的一个链接,写得很好。他的处理方法不是从Hibernate去考虑,而是从Tomcat的SessionContext事件管理来考虑的。

   http://cszyj780217.blogbus.com/logs/2985731.html

   
时间:2007-11-01
一直都是用MyEclipse生成的,试试Hibernate Synchronizer。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐