kryo的核心技术是什么?

时间:2013-11-21 15:50:10

标签: java serialization kryo

Kryo真的很快而且很小。这里有什么秘密?

我已经潜入其代码一段时间了,但仍需要一些指导。

感谢。

1 个答案:

答案 0 :(得分:3)

来自their page

  

2.22版本修复了许多已报告的问题并提高了稳定性   性能。它还引入了许多新功能,最值得注意的是   可以使用Unsafe直接读写对象内存。这个   是绝对最快的序列化方式,特别是对于大型序列化   原始数组

它使用对字段的直接字节码级访问 - sun.misc.UnsafeASM library。在引入不安全的用法之前,Kryo很快。我认为,一般的答案是,绩效是他们的首要任务。仔细使用时,即当java.lang.Fieldjava.lang.Method被缓存时,Java的反映速度并不慢。我设置了一个实验,用两个不同的比较器对数组进行排序 - 一个使用直接字段访问,另一个使用缓存字段。只有2倍的差异,这意味着在IO的背景下无法察觉。

<强> FieldSerializer

  

默认情况下,大多数类最终都会使用FieldSerializer。它   基本上做手写序列化会做什么,但它做到了   自动。 FieldSerializer确实直接赋值给对象   领域。 如果字段是公共,受保护或默认访问   (包私有),字节码生成用于最大速度(参见   ReflectASM)。对于私有字段,setAccessible和缓存反射   使用,仍然很快。