各种java序列化工具性能对比
2013-09-12 16:00
387 查看
转自:http://www.kafka0102.com/2010/10/383.html
看到一个很不错的工具http://github.com/eishay/jvm-serializers/,可以用它来评测各种流行的java序列化反序列化工具,使用上也很简单。想试试该工具的,下载源码后参考起README操作即可。而我更关心的是,是各种工具的性能对比,以作选择的一个衡量标准,也就是http://github.com/eishay/jvm-serializers/wiki的图示和数据。本文也就简单转摘其图示,图示中的java-manual指的是根据对象(数据)格式手工操作(当然是最快的,但不具有通用性),java-buildin-in就是内置的序列化方式(ObjectOutputStream、ObjectInputStream),其他工具的使用版本可以查看其wiki。
创建一个对象,将其序列化成一个字节数组,然后再反序列化成一个对象。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart1.png)
创建一个对象,将其序列化成一个字节数组。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart2.png)
相比于序列化,反序列化更耗时。为了更公平的比较,jvm-serializers在反序列化测试时访问了反序列化得到的对象的所有字段(也就是deep的含义),因为部分工具反序列化时“偷懒”而没有做足工作。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart3.png)
序列化数据的大小,这个大小会依赖于使用的数据。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart4.png)
使用java内置的DEFLATE(zlib)压缩的序列化数据的大小。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart5.png)
对象创建耗时很短(平均100纳秒)所以通常的比较没什么意义。不过,不同工具创建的对象在表现上会有不同。有的工具只是创建普通的java类,你可以直接访问其字段,而有的使用get/set方法,有的使用builder模式。
![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart6.png)
分析这些对比,java内置的序列化方式性能很差(这才催生了各种序列化工具)。在这些工具中,protostuff表现极为出色,盖过了名头响亮的protobuff和thrift。通用格式中,json要比xml强不少,而不同工具对同样格式的性能表现也有差别,这也给了选择工具的一个指导。另一个值得一提的是bson,尽管jvm-serializers没有包含它,相信性能上应该不错。也可以参考jvm-serializers已有工具评测代码的实现,添加比如处理bson、php等格式的序列化工具的评测。
看到一个很不错的工具http://github.com/eishay/jvm-serializers/,可以用它来评测各种流行的java序列化反序列化工具,使用上也很简单。想试试该工具的,下载源码后参考起README操作即可。而我更关心的是,是各种工具的性能对比,以作选择的一个衡量标准,也就是http://github.com/eishay/jvm-serializers/wiki的图示和数据。本文也就简单转摘其图示,图示中的java-manual指的是根据对象(数据)格式手工操作(当然是最快的,但不具有通用性),java-buildin-in就是内置的序列化方式(ObjectOutputStream、ObjectInputStream),其他工具的使用版本可以查看其wiki。
1、Total Time (“total”)
创建一个对象,将其序列化成一个字节数组,然后再反序列化成一个对象。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart1.png)
2、Serialization Time (“ser”)
创建一个对象,将其序列化成一个字节数组。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart2.png)
3、Deserialization Time (“deser+deep”)
相比于序列化,反序列化更耗时。为了更公平的比较,jvm-serializers在反序列化测试时访问了反序列化得到的对象的所有字段(也就是deep的含义),因为部分工具反序列化时“偷懒”而没有做足工作。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart3.png)
4、Serialized Size (“size”)
序列化数据的大小,这个大小会依赖于使用的数据。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart4.png)
5、Serialization Compressed Size (“size+dfl”)
使用java内置的DEFLATE(zlib)压缩的序列化数据的大小。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart5.png)
6、Object Creation Time (“create”)
对象创建耗时很短(平均100纳秒)所以通常的比较没什么意义。不过,不同工具创建的对象在表现上会有不同。有的工具只是创建普通的java类,你可以直接访问其字段,而有的使用get/set方法,有的使用builder模式。![](http://www.kafka0102.com/wp-content/uploads/2010/10/chart6.png)
分析这些对比,java内置的序列化方式性能很差(这才催生了各种序列化工具)。在这些工具中,protostuff表现极为出色,盖过了名头响亮的protobuff和thrift。通用格式中,json要比xml强不少,而不同工具对同样格式的性能表现也有差别,这也给了选择工具的一个指导。另一个值得一提的是bson,尽管jvm-serializers没有包含它,相信性能上应该不错。也可以参考jvm-serializers已有工具评测代码的实现,添加比如处理bson、php等格式的序列化工具的评测。
相关文章推荐
- 各种常用的序列化性能的对比
- Java几款性能分析工具的对比
- java各种反射性能对比
- Java几款性能分析工具的对比
- Java几款性能分析工具的对比
- 【Java.ThirdParty】序列化框架性能对比(kryo、hessian、java、protostuff)
- 序列化框架的使用及性能对比Kryo、Hessian、Protostuff、java原生
- Java几款性能分析工具的对比
- java原生序列化和Kryo序列化性能实例对比分析
- Java几款性能分析工具的对比
- Java几款性能分析工具的对比
- Java性能分析工具的对比
- erlang序列化工具性能对比(erlang protobuf和term_to_binary对比)
- Java几款性能分析工具的对比
- Java几款性能分析工具的对比
- Java几款性能分析工具的对比
- 序列化框架性能对比(kryo、hessian、java、protostuff)
- Java几款性能分析工具的对比
- [转载]Java几款性能分析工具的对比
- Java几款性能分析工具的对比