hibernate优化(一) 之session优化

java有内存泄露吗?

语法上没有,因为有java垃圾收集器负责回收。但是在实际开发中,比如操作连接池、文件、Hibernate的session等,打开后一定要关闭,否则会有内存泄露。

hibernate优化 之session优化

1。 内存泄露的两种情况分析以及避免 
2。 Sql语句优化注意的地方 
3。 Hibernate Session的合理利用 

今天给大家分析的是第一种:内存泄露的两种情况分析以及避免 

大家可能经常遇到的异常如下两种: 
javax.servlet.UnavailableException: PermGen space 
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
……………… 
另一种内存泄露异常 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 

先说第二种异常! 
第二种异常表示的是栈溢出,栈里面无法容纳其他信息! 
解决的方法,要及时的清空session,大家也可以调整session栈所占的大小 

Session.Clear(),可以有效的解决上述问题 ,尤其是在不断分页循环的时候
如果是查找大量数据库,则需要调整配置文件,把栈的范围扩大,同时要给查找的列上加上索引! 


第二种 
PermGen space 这种,应该是大家最头痛的一个内存泄露的异常了,一般的新手,也经常遇到,要是优化,大家应该了解java的内存回收机制: 
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能,在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。 

优化: 
1. 添加的所有对象,在事物提交之后,设置为NULL; 
2. Hibernate的session的获取,是线程跟踪获取session,如果添加一个提交事物之后,运行session.clear();则会造成session清空,其他任何地方如果获取数据,都是从数据库里面重新查找(个人验证看法); 
3. 执行列表显示时,不能清空session.Clear();否则造成每次list显示,都会查找数据库,会增加数据库访问负载! 
4. 执行列表时,则在request.setAttribute(“”,””);之后,请设置为null,这时你可以启用垃圾回收器,调用方法:System.gc(); 
5. 如需在有列表显示的添加数据内容的时候,需要自己定义session,方可进行session.clear(); 
6. Session.flush(); 是强制与数据库同步,在提交之前,commit之前,就会自动调用session.flush(); 
7. 如下request.setAttribute("page", page); 
8. 请大家了解 session.load() session.get();两个方法 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值