本文共 1006 字,大约阅读时间需要 3 分钟。
注意 session.clear() 的运用
- 尤其在不断分页循环的时候
- 在一个大集合中进行遍历,遍历msg,取出其中的含有敏感字符的对象
- 另一种形式的内存泄漏
- 面试题:Java 有内存泄漏吗?
- 语法级别上没有。不用回收内存,由垃圾收集器回收。
- 实际当中写程序时有。比如打开连接池必须记得关闭、打开文件必须记得关闭,Java 调了 C,C 调了 Windows API,间接产生了内存泄漏。
1+N 问题(面试题)
- FetchType 设为 lazy
- @BatchSize,减少SQL语句发出数量,提高效率,但是并没有真正解决问题
- left join
- criteria 查询(本质上也是 left join)
- 但在hibernate 5.2.0中不行,在5.0之前的版本可以
list 和 iterate(主要为了面试)
- list 取所有
- iterate 取主键,等用到的时候再根据主键取对象
- session 中 list 第二次发出,仍回到数据库查询
- iterate 第二次,首先查找 session 级缓存
- iterate 方法在 hibernate 5.x 版本已 deprecated
一级缓存、二级缓存、查询缓存(面试)
- 什么是缓存
- 什么是一级缓存,session 级别的缓存
- 什么是二级缓存,SessionFactory 级别的缓存,可以跨越 session 存在
- 打开二级缓存
- hibernate.cfg.xml 设定
- annotation @Cache
true org.hibernate.cache.EhCacheProvider
- load 默认使用二级缓存,iterate 默认使用二级缓存
- list 默认往二级缓存加数据,但是查询的时候不用
- 如果要 query 用二级缓存,需打开查询缓存,查询缓存只有重复的查询语句才行
- 调用 Query 的 setCacheble(true) 方法指明使用二级缓存
- xml 设定
true
- 缓存算法(纯粹面试)
- LRU Least Recently Used
- LFU Least Frequently Used(命中率高低)
- FIFO First In First Out
- ehcache 设置 memoryStoreEvictionPolicy=”XXX”
转载地址:http://gjjgj.baihongyu.com/