客户端访问了某个能开启会话功能的资源, web服务器就会建立一个与该客户端对应的HttpSession对象,每一个HttpSession对象都要站用必定的内存空间。若是在某一时间段内访问站点的用户不少,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即便用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时以前,一直占用web服务器内存资源。java
web服务器一般将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。web
将HttpSession对象保存到文件系统或数据库中,须要采用序列化的方式将HttpSession对象中的每一个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,须要采用反序列化的方式,恢复HttpSession对象中的每一个属性对象。因此存储在HttpSession对象中的每一个属性对象必须实现Serializable接口数据库
提升服务器内存的利用率,保证那些暂停活动的客户端在会话超时以前继续原来的会话apache
在多台web服务器协同对外提供服务的集群系统中,使用Session的持久化技术,某台服务器能够将其中发生改变的Session对象复制给其余服务器。保证了在某台服务器中止工做后能够由其余服务器来接替它与客户端的会话浏览器
在一个web应用程序重启时,服务器也会持久化该应用程序中全部HttpSession对象,保证客户端的会话活动仍能够继续。tomcat
Tomcat使用Session Manager 类来管理Session的持久化,他提供了两个SessionManager类服务器
org.apache.catalina.session.StandardManagersession
org.apache.catalina.session.PersistentManagerspa
StandardManager是tomcat默认使用的,在web应用程序关闭时,对内存中的全部HttpSession对象进行持久化,把他们保存到文件系统中。默认的存储文件为对象
serialVersionUID 用来代表类的不一样版本间的兼容性
Java的序列化机制是经过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,若是相同就认为是一致的,能够进行反序列化,不然就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID做序列化版本比较用,这种状况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。
若是咱们不但愿经过编译来强制划分软件版本,即实现序列化接口的实体可以兼容先前版本,未做更改的类,就须要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体均可以相互进行串行化和反串行化。