`

内存泄露 hibernate优化 web程序优化 session优化(一)

阅读更多
大家好,我是hacker507,是一个IT行业的菜鸟级新手,由于今天的程序遇到了点错误,所以稍微研究了下系统优化这个概念,经过与朋友一起研究,最终的结果也起到了一定的作用;
一下未研究的内容,如果有错误的地方,请高手及时纠正,再次感谢

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();两个方法



Sql语句优化:
   研究了一半,下次再给大家供上,希望大家能纠正我的错误哈


0
0
分享到:
评论

相关推荐

    千方百计笔试题大全

    31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...

    java面试宝典

    31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...

    Java面试宝典2010版

    81、java中会存在内存泄漏吗,请简单描述。 82、能不能自己写个类,也叫java.lang.String? 83. Java代码查错 二. 算法与编程 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,...

    最新Java面试宝典pdf版

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    Java面试笔试资料大全

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    JAVA面试宝典2010

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    Java面试宝典-经典

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    java面试题大全(2012版)

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    Java面试宝典2012版

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c...

    java面试宝典2012

    81、java中会存在内存泄漏吗,请简单描述。 59 82、能不能自己写个类,也叫java.lang.String? 62 83. Java代码查错 63 二. 算法与编程 67 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    Java面试宝典2012新版

    81、java中会存在内存泄漏吗,请简单描述。 53 82、能不能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...

    DWR.xml配置文件说明书(含源码)

    在访问量比较大的情况下,可以不用担心发生内存泄露的情况. 配置一个creator的创建和远程方法调用设置: ... 上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用...

    Java 面试宝典

    一. Java 基础部分..................................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么...

Global site tag (gtag.js) - Google Analytics