- 论坛徽章:
- 0
|
用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 |
|