答案 0 :(得分:3)
来自their page:
2.22版本修复了许多已报告的问题并提高了稳定性 性能。它还引入了许多新功能,最值得注意的是 可以使用Unsafe直接读写对象内存。这个 是绝对最快的序列化方式,特别是对于大型序列化 原始数组。
它使用对字段的直接字节码级访问 - sun.misc.Unsafe
或ASM library。在引入不安全的用法之前,Kryo很快。我认为,一般的答案是,绩效是他们的首要任务。仔细使用时,即当java.lang.Field
和java.lang.Method
被缓存时,Java的反映速度并不慢。我设置了一个实验,用两个不同的比较器对数组进行排序 - 一个使用直接字段访问,另一个使用缓存字段。只有2倍的差异,这意味着在IO的背景下无法察觉。
<强> FieldSerializer 强>
默认情况下,大多数类最终都会使用
FieldSerializer
。它 基本上做手写序列化会做什么,但它做到了 自动。FieldSerializer
确实直接赋值给对象 领域。 如果字段是公共,受保护或默认访问 (包私有),字节码生成用于最大速度(参见 ReflectASM)。对于私有字段,setAccessible和缓存反射 使用,仍然很快。