【hibernate框架】性能优化之session.clear()的运用和Java内存泄露问题

注意session.clear()的运用,尤其在不断分页循环的时候。
a)在一个大集合中进行遍历,遍历msg,取出其中的含有敏感字样的对象。

hibernate里面有一个缓存,是session级的缓存。一张表里面存了上百万的商品信息,我们要取出这些内容并且进行分页,点击下一页查看商品信息,现在假设在同一个session里面执行这个操作,这时候就会有问题。session先取50条进来,然后再开一个session,上一个session就会被清除,被清的过程是由java虚拟机的垃圾清除器来完成,什么时候清除不确定,你可以用手动来清除,利用session.clear()。
如果你只使用一个session来处理的话,当取50条信息的时候,接着再读的时候就会不断增加,在内存里面的信息就会越来越多,而且你不去清除它,由于有引用的存在,java虚拟机是不会帮你清除的。内存就会越占越多,内存就会爆掉。
实际开发中,我们每一个页面是单独起的一个session,这个就无所谓了。
但是你在导数据或用数据的时候,用到hibernate了,就可能出现这种错误。
应该怎么做呢?就是处理完50条之后,调用session.clear(),之后再调再取。

b)另外一种形式的内存泄露/面试题:Java有内存泄露吗?

Java有没有内存泄露?在语法级别上没有,因为不用回收内存,会被垃圾回收器回收了,但是你写程序的时候用到了其中的资源的时候,一定要记得回收。比如说你打开了数据库的连接池,打开了连接,你一定要记得关闭,不然的话他就在内存里老开着。比如说你打开了文件,你必须把他关闭,因为不关闭的话就无法调用本地的资源来关闭文件。因为打开文件相当于调了C,C调了windows的API,那么windows的API里面C调用的那部分对于C语言来说是需要手动回收内存的,如果不关闭文件它就不会回收。所以是Java引起的泄露,但是语法上不是(在实际当中利用的时候会有)。


转载请注明出处:http://blog.csdn.net/acmman/article/details/43937659

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值