在处理套接字并在其上序列化对象时,我注意到有一些第三方库可以更快地在Java上进行对象序列化,例如Kryo和FST。到目前为止,我期望Java的序列化得到优化并且速度最快。因为,它依赖于语言,并提供预期更快的低级解决方案。但是,考虑过的库声称它们比Java更快。
有人可以解释为什么Java无法提供最快的序列化解决方案吗?为了什么它会放弃更好的表现?
提前致谢。
答案 0 :(得分:18)
有几个原因(我是http://code.google.com/p/fast-serialization/的作者)
原因:
为了提供更好的性能,他们必须放弃对旧版本控制方案的支持(例如,read / writeObject当前工作的方式不是最理想的),并使版本支持等一些内容可选,或选择更多性能敏感的方法那(可能)。此外,HotSpot可能会添加一些内在函数来改进基元的低级处理。在设计API时需要考虑性能,JDK序列化可能不是这样。
答案 1 :(得分:2)
Java序列化很慢,因为它使用反射。 JDK序列化进行了大量的向后兼容性检查和严格的类型检查。 但是在大多数情况下,java序列化在反序列化后获得了100%相同的对象。