zzhengdong 2011-09-27 19:36
浏览 500
已采纳

Hibernate: org.hibernate.query.list内存消耗过大的问题?

使用JProfiler进行性能测试时发现如下情况:

 

在程式不停的运行中,query.list分配的内存不会被回收。不断创建新的instance.

 

是多线程运行的程序。

 

使用Query的方法如下:

 

 

 

public List find(String strhql) {  

        // TODO Auto-generated method stub    

        List result = null;  

        Session session = null;  

        Query query = null;

        try {  

            session = this.getSession();  

            session.beginTransaction();  

            query = session.createQuery(strhql);

            result = query.list();  

            session.getTransaction().commit();

            session.flush();

            session.clear();

            session.close();

        } catch (Exception e) {  

 

        session.getTransaction().rollback();

            logger.debug("执行数据库中查询时失败,语句为:" + strhql, e);    

        } finally {  

            query = null;

            this.closeSession(session);  

        }  

 

        return result;   

    }  

 

有没有遇到过这种情况的朋友,有可行的解决方法么?

 

 

 

  • 写回答

8条回答 默认 最新

  • xiaoyingSUN 2011-09-29 16:25
    关注

    木有2级缓存我觉得可能就变2个了
    检查下你[color=red]HibernateSessionFactory[/color]的构造方法,如果每次都是config之后new一个,那你就用完直接把sessionFactory也关了
    然后看下你Impl包里面的THDservice,是不是有什么方法没有if做判断
    一直叫getParam()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料