大家好,我是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语句优化:
研究了一半,下次再给大家供上,希望大家能纠正我的错误哈
分享到:
相关推荐
4. **使用Open Session in View(OSIV)模式**:在Web开发中,为每个HTTP请求开启一个新的会话,可以避免跨请求的一级缓存污染问题,但也要注意防止会话泄漏。 压缩包文件“hibernate_cache_level1”可能包含与一级...
ThreadLocal提供了一种有效且便捷的解决方案,但同时也需要注意其内存消耗和内存泄漏的风险,特别是在长生命周期的线程中。理解并选择合适的Session管理策略,对于优化性能和避免并发问题至关重要。
但需要注意的是,长时间持有Session可能导致内存泄漏,需配合缓存策略和事务管理来避免问题。 3. **Open Session in View(OSIV)模式** OSIV模式旨在解决Web应用中,由于用户请求可能会引发多次数据库操作,而...
在Java Web开发中,Spring和Hibernate是两个非常重要的框架,它们分别处理依赖注入和对象关系映射(ORM)。本文将详细探讨Spring与Hibernate的集成,特别是如何在集成环境中使用和管理`Session`。 首先,Spring作为...
在IT行业中,尤其是Java开发领域,Hibernate是一个非常重要的框架,它简化了与数据库交互的过程,提供了对象关系映射(ORM)的功能。本文将深入探讨如何在项目中使用Hibernate进行数据库连接的注册,以及相关的重要...
例如,二级缓存的使用需要谨慎,以免造成内存泄漏或不必要的数据同步开销。 第三,Spring框架不仅提供了IoC容器,还引入了AOP,用于实现声明式事务管理。这意味着开发者无需在代码中显式处理事务边界,而是通过配置...
在Web应用中,通常使用Servlet容器如Tomcat,它支持ThreadLocal机制,能够为每个请求创建并维护一个独立的Session对象。这种方式称为“ThreadLocal Session”。 使用ThreadLocal Session的一个关键好处是事务的自动...
总结起来,"Hibernage_Session_Manager_ThreadLocal"是一个关于使用ThreadLocal在多线程环境中优化Hibernate Session管理的技术实践,通过这种方式可以提升应用程序的性能和安全性。`HibernateUtil.java`是实现这一...
Spring还提供了HibernateTemplate或JpaTemplate,它们是用于执行Hibernate操作的便捷工具,可以帮助我们避免直接操作Session,减少可能出现的资源泄露。 整合Spring和Hibernate的关键在于使用Spring的Transaction ...
Struts是一个MVC(Model-View-Controller)框架,它负责处理用户请求,控制应用程序流程,并与视图层进行交互。而Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,将Java对象与数据库表对应,使得...
《Spring Persistence with Hibernate》这本书聚焦于使用Spring框架与Hibernate结合来构建强大且可靠的持久化解决方案,适用于企业级Java应用程序。Spring框架是一个全面的后端开发框架,而Hibernate则是一个流行的...
1. 避免内存泄漏:在使用完Session后记得关闭。 2. 数据库连接池:使用连接池如C3P0或HikariCP提高性能。 3. 错误处理:对可能出现的异常进行捕获和处理。 4. 性能优化:合理使用缓存,避免过多的数据库查询。 通过...
6. **关闭资源**: 在操作完成后,`HibernateUtil`会负责关闭Session和SessionFactory,以释放数据库连接和资源,避免内存泄漏。 使用`HibernateUtil`工具类的好处在于,开发人员无需关心SessionFactory和Session的...
3. **会话与事务控制**:在整合场景下,如何有效地管理和控制Hibernate的Session以及事务是关键挑战之一。不当的控制可能导致资源泄露、事务处理错误等问题。 三、解决方案与技巧 ### 手工处理方法 最直观的方法是...
- 如果在Web应用中Session管理不当,比如没有及时释放不再使用的Session,也会导致内存消耗过大。 - 应该定期检查和清理无效的Session,例如通过设置合理的超时时间或者手动调用`session.invalidate()`方法来释放...
了解这一过程有助于优化程序性能,避免内存泄漏。 总的来说,利用MyEclipse开发Struts+Hibernate应用,需要掌握Struts的MVC架构、Action的编写、Struts配置,以及Hibernate的实体映射、数据操作。通过这个过程,...
在Java Web开发中,"Struts+Hibernate实现用户登录案例"是一个常见的应用场景,它结合了两个重要的技术框架:Struts和Hibernate。Struts是MVC(Model-View-Controller)设计模式的一种实现,用于处理用户的请求和...
【标题】:“Java Hibernate C3P0”是一个关于Java编程中的持久化框架Hibernate与C3P0连接池的讨论。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以使用面向对象的方式来...
Struts2、Hibernate和MySQL是三个在Web开发中广泛应用的技术,它们共同构成了一个强大的后端框架,用于构建高效、可维护的Web应用程序。本项目利用这些技术实现了用户登录功能,以下将详细介绍每个部分的关键知识点...
SSH集成是Java开发Web应用程序时常用的一种框架整合方式,它结合了Struts、Spring和Hibernate三个开源框架的优势,提供了一种高效、灵活且易于管理的解决方案。以下将详细阐述这三个框架以及它们集成后的主要特点和...