序列化、反序列化性能测试
0x1 摘要
平时开发中经常听到序列与反序列化,特别是在分布式系统与RPC应用中,今天突然心血来潮对几种常用的序列化框架做个性能测试对比,测试对象:
- Java 原生序列
- Avro
- Thrift
- Protobuf
0x2 测试环境及工具
测试环境:
系统类型:64 位操作系统
CPU:Intel(R) Core(TM) i3-4130 CPU @ 3.40 GHz 3.40 GHz
内存:8 GB
开发工具:IDEA
测试工具:
JMH
0x3 测试实体
public class User implements Serializable{
private static final long serialVersionUID = 5149128310592716591L;
private int age;
private String username;
private String address;
public int getAge() {
return age;
}
public User setAge(int age) {
this.age = age;
return this;
}
public String getUsername() {
return username;
}
public User setUsername(String username) {
this.username = username;
return this;
}
public String getAddress() {
return address;
}
public User setAddress(String address) {
this.address = address;
return this;
}
}
0x4 JMH参数设置
@BenchmarkMode(Mode.Throughput)
@Warmup(iterations = 3)
@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS)
@Threads(4)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
参数意义不在此文做介绍,大家可以自行网上搜索或者看官网。
0x5 测试结果
Encode:
| Benchmark | Mode | Cnt | Score | Erorr | Units |
|---|---|---|---|---|---|
| SerializableEncodeTest.testAvroSerializableEncode | thrpt | 20 | 2881.398 ± | 27.619 | ops/ms |
| SerializableEncodeTest.testJavaSerializableEncode | thrpt | 20 | 1708.157 ± | 122.516 | ops/ms |
| SerializableEncodeTest.testProtobufSerializableEncode | thrpt | 20 | 10349.962 ± | 215.994 | ops/ms |
| SerializableEncodeTest.testThriftSerializableEncode | thrpt | 20 | 5292.191 ± | 49.890 | ops/ms |
Decode:
| Benchmark | Mode | Cnt | Score | Erorr | Units |
|---|---|---|---|---|---|
| SerializableEncodeTest.testAvroSerializableEncode | thrpt | 20 | 931.167 ± | 13.185 | ops/ms |
| SerializableEncodeTest.testJavaSerializableEncode | thrpt | 20 | 521.145 ± | 6.993 | ops/ms |
| SerializableEncodeTest.testProtobufSerializableEncode | thrpt | 20 | 25335.295 ± | 564.496 | ops/ms |
| SerializableEncodeTest.testThriftSerializableEncode | thrpt | 20 | 5239.726 ± | 75.048 | ops/ms |
0x6 结论
从结果中不难看出,Protobuf不管是序列化还是反序列化都有绝对优势,Java原生都是最弱的。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
RSA 非对称加密【转】
演示代码:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw Base64工具类,可以让rsa编码的乱码变成一串字符序列 1 package com.utils; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 11 import it.sauronsoftware.base64.Base64; 12 13 /** */ 14 /** 15 * <p> 16 * BASE64编码解码工具包 17 * </p> 18 * <p> 19 * 依赖javabase64-1.3.1.jar 20...
-
下一篇
JumpServer 安装
安装文档:http://docs.jumpserver.org/zh/docs/step_by_step.html 1、Jumpserver 是一款由Python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 特点: 完全开源,GPL授权 Python编写,容易再次开发 实现了跳板机基本功能,认证、授权、审计 集成了Ansible,批量命令等 支持WebTerminal Bootstrap编写,界面美观 自动收集硬件信息 录像回放 命令搜索 实时监控 批量上传下载 2、安装: 一步一步安装(CentOS) 环境 系统: CentOS 7 IP: 192.168.244.144 关闭 selinux 和防火墙 # CentOS 7$ setenforce 0 # 可以设置配置文件永久关闭$ systemctl stop iptables.service$ systemctl stop firewalld.service# 修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文$ localedef...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,8上快速安装Gitea,搭建Git服务器

微信收款码
支付宝收款码