为什么实体类需要序列化

本文介绍了在Web应用中如何通过session的持久化技术解决大量并发连接带来的内存消耗问题。当用户访问支持会话功能的资源时,服务器会创建HTTPSession对象并存储于内存中。为了减轻内存负担,不活跃但未过期的session会被转移到文件系统或数据库中存储,这个过程称为session的持久化。文章还解释了序列化的作用及其在Java中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的说就是每当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决这个问题我们使用一种技术:session的持久化

什么是session的持久化?

web服务器会把暂时不活动的并且没有失效的HTTPSession对象转移到文件系统或数据库中储存,服务器要用时在把他们转载到内存。

把Session对象转移到文件系统或数据库中储存就需要用到序列化; java.io.Serializable。

在tomcat重启的时候进行一个钝化操作、启动成功之后再进活化。

在对应的区域加载进来,不会丢失(前提是session中的存放的变量必须实现序列化接口才能钝化,才能序列到硬盘上的一个二进制文件中去)。


举个例子,你编写了一款游戏,保存记录时把所有状态一一保存非常麻烦,这时就可以使用Serializable(序列化接口),它的作用是可以将一个对象实例序列化,序列化后你可以选择将它保存在你需要的位置。 

相对的,读取后生成的对象所有属性(除了设置为瞬时值的属性)将和原对象的属性相同(只是内存地址不同)。 

这样可以方便的将一个java对象写入到磁盘中,保存该对象的所有状态! 

值得注意的是序列化的对象中包含的属性和其他对象都需要实现序列化接口,不然无法正常序列化! 

在hibernate里,并非所有的实体类必须实现序列化接口,因为在hibernate中我们通常是将基本类型的数值映射为数据库中的字段。而基础类型都实现了序列化接口(String也实现了)。 

所以,只有在想将一个对象完整存进数据库(存储为二进制码),而不是将对象的属性分别存进数据库,读取时再重新构建的话,就可以不用实现序列化接口。实现了Serializable,可以方便保存数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值