免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1209 | 回复: 0
打印 上一主题 下一主题

hibernate内存泄漏问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-13 11:33 |只看该作者 |倒序浏览
用hibernate写数据库程序,发现有内存泄漏情况存在,于是写了如下一个测试代码,结果内存还是持续增长,并到2300条的时候就出错了,而且写入数据库的速度很慢.

  for(int i=0;i
         article info = new article();  //建立一个数据库对象
                    
         info.setSort(i);               //设置值      
         info.setUrl("dddddddddddddddddddd");
         info.setTitle("tttttttttttttttttt");
         info.setAuthor("aaaaaaaaaaaaaa");
         info.setQuarry("qqqqqqqqq");
         info.setEmbodyTime("20060101");   

         Configuration cfg = new Configuration();
         cfg.configure();
         SessionFactory sf = cfg.buildSessionFactory();
         Session sess = sf.openSession();

         sess.save(info);
         sess.flush();
         try{
             sess1.connection().commit();
             }catch(HibernateException e){
                  e.printStackTrace();
             }catch(SQLException e){
                  e.printStackTrace();
         }                                                              
         sf1.close();
         sess1.close();
         System.out.println(i);
  }

用baidu搜索到
http://www.matrix.org.cn/jmatrix/thread.shtml?topicId=24549&forumId=23

It's from your Hibernate CGLIB library because Hibernate uses the code generation library to enhance classes at runtime
The session Factory only needs to be created at once, rather than every time.
Try modify to this:
private static final SessionFactory sessionFactory;
Declare SessionFactory is static and final, and it should works
Hope this helps.
cheers

谢谢,问题已经解决了,确实就是:
sessionFactory = new Configuration().configure().buildSessionFactory();
的缘故,不能每次都new一个,改成:
static final SessionFactory sessionFactory;
就好了

基于以上,我把代码修改成如下所示:

private static final SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

for(int i=0;i         article info = new article();  //建立一个数据库对象
                    
         info.setSort(i);               //设置值      
         info.setUrl("dddddddddddddddddddd");
         info.setTitle("tttttttttttttttttt");
         info.setAuthor("aaaaaaaaaaaaaa");
         info.setQuarry("qqqqqqqqq");
         info.setEmbodyTime("20060101");   

         Session sess = sessionFactory.openSession();

         sess.save(info);
         sess.flush();
         try{
             sess1.connection().commit();
             }catch(HibernateException e){
                  e.printStackTrace();
             }catch(SQLException e){
                  e.printStackTrace();
         }                                                              
         sf1.close();
         sess1.close();
         System.out.println(i);
  }

运行成功,而且写入效率提高了很多.谢谢各位无私提供信息的网友!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17347/showart_127330.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP