当前位置: 首页 > news >正文

java序列化方式性能比较

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

有一个很不错的工具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”)

创建一个对象,将其序列化成一个字节数组,然后再反序列化成一个对象。

 

2、Serialization Time (“ser”)

创建一个对象,将其序列化成一个字节数组。

 

3、Deserialization Time (“deser+deep”)

相比于序列化,反序列化更耗时。为了更公平的比较,jvm-serializers在反序列化测试时访问了反序列化得到的对象的所有字段(也就是deep的含义),因为部分工具反序列化时“偷懒”而没有做足工作。

 

4、Serialized Size (“size”)

序列化数据的大小,这个大小会依赖于使用的数据。

 

5、Serialization Compressed Size (“size+dfl”)

使用java内置的DEFLATE(zlib)压缩的序列化数据的大小。

 

6、Object Creation Time (“create”)

对象创建耗时很短(平均100纳秒)所以通常的比较没什么意义。不过,不同工具创建的对象在表现上会有不同。有的工具只是创建普通的java类,你可以直接访问其字段,而有的使用get/set方法,有的使用builder模式。
 

分析这些对比,java内置的序列化方式性能很差(这才催生了各种序列化工具)。在这些工具中,protostuff表现极为出色,盖过了名头响亮 的protobuff和thrift。通用格式中,json要比xml强不少,而不同工具对同样格式的性能表现也有差别,这也给了选择工具的一个指导。另 一个值得一提的是bson,尽管jvm-serializers没有包含它,相信性能上应该不错。也可以参考jvm-serializers已有工具评测 代码的实现,添加比如处理bson、php等格式的序列化工具的评测。

转载于:https://my.oschina.net/airship/blog/1585893

相关文章:

  • 【元气云妹】短信服务
  • sNote(自己的学习笔记)想法
  • Tomcat配置-学习笔记1---核心配合文件server.xml整体结构
  • 熔断器 Hystrix 源码解析 —— 命令执行(二)之执行隔离策略
  • Java Applet 基础
  • 使用svnadmin对VisualSVN进行项目迁移
  • 洛谷——P1123 取数游戏
  • SpringMVC-@CookieValue
  • php get_called_class()函数与get_class函数的区别
  • OSChina 周三乱弹 ——逃离帝都,去杭州如何?
  • Class:Task 类
  • oracle创建定时任务
  • apache httpd的常见使用方法(1)
  • day7-mysql数据库应用管理进阶
  • javascript设计模式——中介者模式
  • hexo+github搭建个人博客
  • 自己简单写的 事件订阅机制
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Angular6错误 Service: No provider for Renderer2
  • CSS实用技巧
  • ES学习笔记(12)--Symbol
  • extjs4学习之配置
  • FastReport在线报表设计器工作原理
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • React组件设计模式(一)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 创建一种深思熟虑的文化
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前言-如何学习区块链
  • 如何设计一个微型分布式架构?
  • 树莓派 - 使用须知
  • 为什么要用IPython/Jupyter?
  • 新版博客前端前瞻
  • 学习笔记:对象,原型和继承(1)
  • 一道闭包题引发的思考
  • 你对linux中grep命令知道多少?
  • 【干货分享】dos命令大全
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Prometheus VS InfluxDB
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​低代码平台的核心价值与优势
  • ​业务双活的数据切换思路设计(下)
  • #if #elif #endif
  • (+4)2.2UML建模图
  • (C#)获取字符编码的类
  • (C++)八皇后问题
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (五)c52学习之旅-静态数码管
  • (五)MySQL的备份及恢复