发布于 2013-11-21 16:15:40
来自他们的网页
2.22版本修复了许多报告的问题,并提高了稳定性和性能。它还引入了许多新特性,特别是可以使用不安全的方法直接读取和写入对象内存。这是绝对最快的序列化方法,特别是对于大型原语数组。
它使用直接字节码级访问字段- sun.misc.Unsafe或ASM库。甚至在引入不安全的使用之前,Kryo的速度就快了。一般的答案,我认为是,表现是他们的最高优先。Java的反射在谨慎使用时并不慢-即当java.lang.Field和java.lang.Method被缓存时。我建立了一个实验,用两个不同的比较器对一个数组进行排序--一个是使用直接字段访问,另一个是使用缓存字段。只有2倍的差异,这意味着在IO上下文中不明显。
默认情况下,大多数类最终将使用
FieldSerializer。它本质上做的是手写的序列化,但它是自动完成的。FieldSerializer将直接赋值给对象的字段。如果字段是公共的、受保护的或默认的访问(包私有),则使用字节码生成实现最大速度(参见ReflectASM)。对于私有字段,使用setAccessible和缓存反射,这仍然是相当快的。
https://stackoverflow.com/questions/20125546
复制相似问题