session缓存理解

来源:互联网 发布:isignature签章软件v8 编辑:程序博客网 时间:2024/05/21 23:00

前奏知识点:

1、         java对象在jvm中的生命周期?对象被创建分配内存空间,只要这个对象被引用变量引用,这个对象就不会被回收器回收。Java集合有一个重要特性,集合存放的是java对象的引用,当向集合中添加对象其实是向集合中添加对象的引用,因此集合没有清空集合中的对象就一直存活。

2、         如果希望java中的对象A一直处于生命周期,就必须保证至少有一个引用变量引用它,或可以通过其他处于生命周期的对象B导航到这个对象A,比如说在对象B的java集合属性中存放了对象A的引用。Session接口的实现中包含了一系列的集合,这些集合构成了session的缓存,如果session实例没有结束生命周期,存放在它缓存中的对象就不会结束生命周期。

3、         清理缓存:session能够在某些时间点上,按照缓存中对象的变化来执行相关的sql语句,来同步更新数据库,这一过程被称为清理缓存

理解session的缓存:

1、         session缓存就是通过集合类实现的,持久化一个对象的时候,对象会被放到缓存中,即使程序中没有引用变量引用它,只要session缓存没有关闭,持久化对象仍然处于生命周期。

2、         作用:减少访问数据库的频率(先在session缓存中寻找,若没有再发出sql语句到数据库中加载对象);保证数据库中相关的记录和缓存中的相应记录的同步,映射文件建立的是表和类之间的静态映射,而Session则建立表中的关系数据与运行时session缓存的对象的动态映射。

3、         脏对象,session会为存放其中的对象属性复制一份快照,当清理缓存时,会进行脏检查,即比较当前对象的属性与它的快照来判断对象属性是否发生了变化,如果发生了变化,就称这个对象是脏对象。

4、         Session会在以下时间点清理缓存:当应用程序调用org.hibernate.Transaction.commit( );当程序执行查询操作时,如果缓存中的持久化对象属性发生变化了(查询对象时,将把对象放到缓存中去),就会清理缓存;应用程序调用session.flush()。