JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决

简介: JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决

问题一:Fury是如何实现与JDK序列化100%兼容的?


Fury是如何实现与JDK序列化100%兼容的?


参考回答:

Fury通过模拟JDK序列化的过程,但使用Fury内置的JIT序列化器进行加速和减少序列化结果大小。它实现了JDK的writeObject/readObject/readObjectNoData/writeReplace/readResolve等自定义序列化行为,保证了与JDK序列化的一致性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654750


问题二:Fury在处理writeReplace/readResolve方法时有哪些改进?


Fury在处理writeReplace/readResolve方法时有哪些改进?


参考回答:

Fury在处理writeReplace/readResolve方法时,完整实现了与JDK相同的replace/resolve行为,即使在writeReplace方法返回相同类型不同引用的对象时,也能正常序列化,不会出现栈溢出问题。同时,当返回对象类型与原始对象类型不同时,Fury能够避免写入原始对象的类名称,减少序列化的结果大小。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654751


问题三:Fury中的如下分别负责什么?


Fury中的ReplaceResolveSerializer和ObjectStreamSerializer分别负责什么?


参考回答:

ReplaceResolveSerializer负责处理writeReplace/readResolve自定义序列化,完整实现了JDK的replace/resolve行为。而ObjectStreamSerializer则实现了JDK的writeObject/readObject/readObjectNoData/registerValidation行为,保证与JDK序列化行为的一致性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654752


问题四:Fury如何保证序列化类型的前后兼容性?


Fury如何保证序列化类型的前后兼容性?


参考回答:

Fury通过使用CompatibleSerializer来序列化字段数据,在读写端类型不一致的情况下也能正确反序列化。它实现了PutField/GetField的子类,保证了实际序列化逻辑可以转发给Fury,从而保证了类型的前后兼容性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654753


问题五:Fury在序列化器初始化部分和执行部分做了哪些工作?


Fury在序列化器初始化部分和执行部分做了哪些工作?


参考回答:

在初始化部分,Fury会获取对象的无参数构造函数,并遍历对象层次结构,创建每个class的JITCompatibleSerializer/CompatibleSerializer等。

在执行部分,它会遍历对象类层次结构,依次序列化每个类型的字段数据。

对于定义了writeObject方法的类型,Fury会缓存序列化上下文并调用writeObject方法;对于未定义writeObject方法的类型,则直接调用JITCompatibleSerializer进行序列化。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654755


问题六:Fury与JDK/Kryo/Hessian在性能上相比如何?


Fury与JDK/Kryo/Hessian在性能上相比如何?


参考回答:

在完整实现JDK自定义序列化后,Fury在任意场景下都不再调用JDK序列化。

相比Kryo,Fury有10倍的性能提升;

相比Hessian等框架,也有3倍的性能提升。

Fury是业界唯一一个能够跟JDK序列化保持100%兼容性和正确性的框架。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654756

相关文章
|
6月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
452 3
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
197 2
|
自然语言处理 JavaScript 前端开发
JDK序列化原理问题之FuryJDK序列化性能问题的如何解决
JDK序列化原理问题之FuryJDK序列化性能问题的如何解决
314 2
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
281 0
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1457 141
|
8月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
557 21
|
8月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
342 11
|
10月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
510 41
|
7月前
|
Ubuntu Java Android开发
在Ubuntu 18.04上安装与JDK 8兼容的Eclipse版本的步骤。
安装过程结束后,您就可以开始使用Eclipse来开发您的Java项目了,并且确保它与JDK 8兼容无误。这个过程涉及的是一个基本的安装流程,针对使用Java 8的用户,Eclipse的其他配置和插件安装根据个人开发环境和需求来定制。
486 0