`
myfoot
  • 浏览: 23898 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

hibernate session 内存的清空问题

 
阅读更多

进段时间在折腾一个批量处理数据的东西,就是从几百万的表中查数据到内存,还会通过主键关联很多表。

 

callback方法一次查300行数据,每行数据用主键关联2张表的数据,就是一次900行的数据。

 

其中一个实体是内容,在mysql是一个text子段,可能比较长。

 

在每次调用完callback后,只是close了session。

 

用jstat看了内存使用,在200多次查询以后,老身代堆区 100% 。

 

之后调用了session的clear()以后解决。

 

这里为什么明明在不调clear()的时候,明明GC了,但是还是没有明显的内存回收,session缓存的对象依然不见回收。

 

代查。

分享到:
评论

相关推荐

    Hibernate下数据批量处理解决方案

    需要注意的是,如果启用二级缓存,批量操作可能导致额外的内存问题,因为Hibernate需要在事务结束时同步二级缓存。在这种情况下,可能需要临时禁用二级缓存以避免不必要的内存消耗。 总的来说,虽然ORM框架在处理...

    hibernate缓存的问题

    一级缓存是 Hibernate Session 内部的缓存,它是默认开启且不可卸载的,主要用于保持 Session 内部数据状态同步。由于 Session 生命周期较短,一级缓存的命中率不高,对系统性能提升有限。二级缓存则是...

    Hibernate 使用缓存时,数据同步问题

    一级缓存在Session关闭或清空时失效。 - **二级缓存**:在SessionFactory级别共享,用于跨Session存储实体的实例和状态,从而避免频繁地访问数据库。二级缓存提高了数据的读取速度,但同时也带来了数据一致性的问题...

    hibernate的一级缓存和二级缓存

    一级缓存,也称为Session缓存,是每个Hibernate Session实例私有的。当Session执行查询操作时,会将结果存储在一级缓存中。如果同一Session再次执行相同的查询,Hibernate将直接从一级缓存获取数据,避免了重复的...

    hibernate操作数据库笔记

    初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: Configuration config = new Configuration()....

    hibernate的相关jar包

    1. `hibernate-core.jar`:这是Hibernate的核心库,包含了持久化框架的主要功能,如Session接口、Entity接口、Criteria查询等。 2. `hibernate-entitymanager.jar`:提供JPA(Java Persistence API)的支持,使得...

    Hibernate内容大纲答案

    - 然后,通过`Configuration`类加载配置文件并创建一个`SessionFactory`实例,这是Hibernate的核心,用于创建Session。 - 创建`Session`实例,它是与数据库交互的单线程工作单元,类似于JDBC中的Connection。 - ...

    Hibernate原理

    6. **Flush and Clear**:在Session结束前,Hibernate会将缓存中的脏数据(即已修改但未同步到数据库的数据)刷新到数据库,并清空缓存,确保数据的一致性。 7. **Session和SessionFactory关闭**:在应用程序结束或...

    深入理解Hibernate缓存

    - **生命周期与Session相同**:一级缓存的生命周期与`Session`的生命周期一致,即`Session`关闭时,一级缓存也会被清空。 - **作用范围**:一级缓存仅对当前`Session`有效。 **示例代码**: ```java Session ...

    jdbc_Hibernate总结

    在Hibernate中,`Session`对象提供了`get`和`load`方法来查询数据。`load`方法采用延迟加载机制,只有在真正使用对象时才会执行SQL,而`get`方法则立即执行查询。`flush()`、`clear()`和`close()`方法分别用于清理...

    hibernate教程hibernate教程

    一级缓存会在Session关闭时被清空。 **二级缓存**是SessionFactory级别的,是可插拔的缓存插件,可以跨多个Session共享,其生命周期与应用程序的生命周期相对应,是进程范围或集群范围的缓存。二级缓存存储的是对象...

    hibernate性能优化.doc

    这是因为 Hibernate 的 Session 有一个一级缓存,会将所有对象存储在内存中。如果不及时清空缓存,内存将会溢出。 解决方法是使用事务和 flush() 方法来清空缓存。例如: ```java Transaction tx = session.begin...

    Hibernate

    - **定期flush和clear**:在循环插入过程中,每达到一定数量(如每20条记录),调用`session.flush()`和`session.clear()`方法,强制Hibernate将当前事务中的变更同步至数据库,并清空session缓存,避免内存占用过高...

    Hibernate总结

    `flush()`会将当前Session中的所有变更同步到数据库,而`clear()`则会清空Session的一级缓存,释放内存资源,确保后续操作不会因内存不足而失败。 ### 2. 批量更新策略 进行批量更新时,可以使用`...

    hibernate 3.3 源码

    flush()方法将内存中的更改同步到数据库,而clear()方法则清空会话状态。 6. ** Criteria API 和 HQL 查询** Hibernate提供了强大的查询API,包括基于类和属性的Criteria API和面向对象的HQL(Hibernate Query ...

    [尚硅谷]_佟刚_Hibernate面试题分析

    - 遇到业务处理数据量大时,可能会引起内存溢出或者数据库连接问题。 - 解决方式可以考虑使用迫切左外连接或手工初始化关联对象,并且要确保配置Filter放在Struts2过滤器之前。 8. getCurrentSession()和...

    hibernate caching

    通过以上内容的学习,我们可以了解到 Hibernate 的缓存机制不仅可以显著提高应用程序的性能,还能帮助开发者更好地理解和优化数据库交互过程中的性能问题。对于开发基于 Hibernate 的大型应用来说,熟悉和掌握这些...

    Hibernate批量处理数据

    1. **定时刷新缓存**:在循环过程中,设定一定的阈值(如每20条记录),当达到该阈值时,使用`session.flush()`将缓存中的数据写入数据库,并使用`session.clear()`清空缓存,以释放内存空间。 ```java for (int...

Global site tag (gtag.js) - Google Analytics