zoukankan      html  css  js  c++  java
  • Hibernate的性能优化问题笔记

    性能优化

    1.注意session.clear()的运用。尤其是不断分页循环的情况下。

    a)在一个大集合中进行遍历,遍历取出数据或者对象

    b)java会引起内存泄漏吗?在语法上是不可能出现内存泄露的,因为我们是运行在java虚拟机,有垃圾处理机制。但是在实际操作中,比如打开session不关闭,打开sessionfactory不关闭(数据库连接池),打开本地文件不关闭等等,这些都是占用内存的,所以可能操作不当会引起内存泄漏。

    2.1+N问题(一对多,多对一)把关联对象也取出来了实际并不需要。导致冗余。

    a)将fecthType设置为lazy(按需而发Query)

    b)BatchSize(size=5)  一次性发5条语句 只是少发sql语句了

    c)join fetch

    3.list和iterate不同

    a)list是直接把对象取出来。iterate是先取出主键id,有需要的时候,在根据id取对象。

    b)list不会应用session缓存 第一次取出时放入缓存,当发送相同的查询语句时,会再次刷新缓存。再次发送sql(仍然会到数据库查询).而iterate是先去找session级缓存,如果有。不会再发sql语句了。所以我们可以取数据是用list,而查时用iterate.

    4.一级缓存 二级缓存 查询缓存

    一级缓存是指session缓存,在同一个session中共享。

    二级缓存是sessionfactory缓存,可跨越session。(ehcache,oscache,(硬盘和内存)jbosscache,sawrmcache(红色可用于集群环境)

    二级环境适用环境:1,经常被访问2.改动不大3.数据量小

            <property name="cache.use_second_level_cache">true</property>
            <property name="cache.provider_class">org.hibernate.cache.EhsCacheProvider</property>

    加@cache注解。

    如果适用查询缓存要配置

    <property name="cache.use_second_level_cache">true</property>
            <property name="cache.provider_class">org.hibernate.cache.EhsCacheProvider</property>
            <property name="cache.use_query_cache">true</property>

    代码要加 iscacheable(true).

    5.缓存算法LRU(空闲时间长拿走) LFU(命中率低的拿走) FIFO(先进先出

  • 相关阅读:
    机器不学习:如何处理数据中的「类别不平衡」?
    机器不学习:一种提升预测能力的方法-机器学习模型
    机器不学习:CNN 入门讲解1-什么是卷积
    机器不学习:浅析深度学习在实体识别和关系抽取中的应用
    机器不学习:用神经模块网络学习推理
    机器不学习:初识迁移学习
    机器不学习:一文彻底读懂智能对话系统
    跟随鼠标的div
    回到顶部的流畅滚动——scrollTop
    js学习小笔记
  • 原文地址:https://www.cnblogs.com/wenjieyatou/p/6130358.html
Copyright © 2011-2022 走看看