Serializable的重要性及应用场景
扫描二维码随身看资讯
使用手机 二维码应用 扫描右侧二维码,您可以
1. 在手机上细细品读~
2. 分享给您的微信好友或朋友圈~
在软件测试中,有同学提到了某些字段在程序刚运行时导致jvm激增的问题,这引起了我的注意。
MybatisPlus Generator自动生成的entity中经常带有Serializable。在开发中,VO和DTO通常是直接复制对应的entity。因此,保不齐VO等对象也保留了这个标记。我意识到之前学过这个知识,但已经遗忘,因此在此进行复习。
对于Serializable接口,它是一个标记接口,没有任何方法定义。它的存在只是为了告诉JVM某个类的实例是可以被序列化的。序列化的主要用途包括持久化、传输和缓存。
而关于serialVersionUID,是一个静态、最终的长整型字段,用于标识序列化的版本。其作用包括版本控制,避免因类的微小变动导致的反序列化失败。
对于不同的序列化机制,如JSON序列化、数据库存储以及其他的自定义序列化方案,serialVersionUID 并不起作用。
在使用JSON进行序列化和反序列化时,serialVersionUID 并不起作用。因为JSON序列化器将对象转换为JSON字符串,并不保留Java类的版本信息。
当使用Redis进行数据存储时,通常也会使用JSON字符串进行序列化和反序列化。因为Redis保存的是序列化后的数据字符串,而不是Java对象本身,因此 serialVersionUID 并不起作用。
对于MySQL等关系型数据库,当对象被存储时,ORM(如MyBatis、Hibernate)会将对象的字段提取出来并生成相应的SQL语句进行存储和查询。在这种情况下,对象序列化是由ORM框架处理的,serialVersionUID 也并不起作用。
在实现一个OJ系统中,我遇到了一个类似GitHub、leetcode的提交记录情况,需要存储在后端中。最终我选择了hash结合一定的编码来处理数据,考虑到通常展示的365个天数的提交记录应该也不会很耗时间,又能具有准确性。
对于这种情况,原本我打算使用redis来存储。在序列化到redis之后,却发现countminSketch没有任何变化。在这次测试中,hash在时间消耗上差距并不大,所以最终选择了hash。
每个serialVersionUID都是静态且final修饰,不会被GC所清理,也不会特别消耗空间,除非类爆炸现象。因此,有必要保留这些标记,毕竟难免可能之后会用到。
- 保卫萝卜2免内购不需要登录下载 v5.2.6 安卓版
- 萌妖来袭百抽送神将版下载 v1.0.0 安卓版
- 封灵诀破解内置菜单下载 v1.0.1 安卓版
- 悟空修仙传0.1折手游平台下载 v1.0.3 安卓版
- 圣境之塔内测版下载 v1.18.24041002 官方最新版
- 蚁族崛起网易版下载 v1.1802.0 安卓版
- 恐怖屠夫肉先生黑客模组最新版本 v1.0.0 安卓版
- 饥荒破解版内置作弊菜单最新版 v1.19.18 手机版
- 横扫千军最新版 v26.5.0 安卓版
- 周五夜放克米老鼠合集模组(Mouse MegaMix)下载 v0.2.7 安卓版
- 砰砰法师破解微信登录下载 v2.9.0 安卓版
- 少年侠客单机免登录破解下载 v1.3.9 安卓版
- 超能赛车无广告下载 v1.1 安卓版
- 少年侠客单机版 v1.3.9 安卓版
- 如何卸载MariaDB并通过yum在线安装Mysql
- 配置Ingress支持HTTPS访问(二):使用cert-manager申请证书
- 【阿里云X博客园】参与征文赢面试绿通资格!还有特别福利哦!
- 使用interface化解一场因操作系统不同导致的编译问题
- 软件模块化原理:用户配置窗体的类库方案
- Keycloak中的跨域资源共享(CORS)处理
- 解密Prompt系列29. LLM Agent之真实世界海量API解决方案:ToolLLM & AnyTool
- 可视化学习:使用极坐标参数方程和SDF绘制有趣的图案
- Avalonia中的线性渐变画刷LinearGradientBrush
- Spring Boot中@Value注解的使用与替代方案
- AI大模型算法工程师的发展趋势及热门开源项目
- 微服务架构下的服务注册中心
- 1
加查之花 正版
- 2
爪女孩 最新版
- 3
企鹅岛 官方正版中文版
- 4
捕鱼大世界 无限金币版
- 5
情商天花板 2024最新版
- 6
内蒙打大a真人版
- 7
球球英雄 手游
- 8
烦人的村民 手机版
- 9
跳跃之王手游
- 10
蛋仔派对 国服版本