对protostuff和java序列化的小测试

简介:
测试方法: 对一个含16个Integer/String/Date类型字段的扁平对象作序列化/反序列化,单机多线程循环执行,用循环一定次数之后sleep(1)控制频率,每隔1秒统计一次执行次数,并观察CPU/LOAD/内存等指标(因内存恒定开销,忽略掉)。

测试环境:4 x Xeon E5520 2.27GHz, 7.3GB 虚拟机

测试结果:

一、采用java内置序列化:
tps(w) thread cpu(%) load
8.9 1 22.3 0.8
15.5 2 46.3 1.64
21 3 69.7 2.88
23 4 88.5 3.5
20.5 5 70 4.2
19.5 6 71 5
20 7 67 6.28
20.5 8 64 6.5
20.5 40 70 7.5

JAVA内置反序列化:
tpc(w) thread cpu(%) load
2 1 24.6 1.1
3.85 2 49 1.9
5.8 3 72 2.8
7.65 4 96.6 4
7.6 5 96.8 4.5
7.6 6 96.9 6.3
7.6 7 97.1 7.2
7.6 8 98 9
7.6 40 97 14.5

二 protostuff序列化
tpc(w) thread cpu(%) load
54 1 9.8 1
105 2 22 0.8
150 3 41 1.8
190 4 52 2.44
180 5 66 3.6
200 6 76 5
240 7 85.7 5.1
250 8 94.3 5.3
270 40 99 17

protostuff反序列化
tpc(w) thread cpu(%) load
38 1 11 0.9
71 2 28.7 1.6
97 3 49 1.9
142 4 57.7 2.5
150 5 65 3.7
160 6 73 4.6
170 7 81 6.8
177 8 89 6.5
175 40 93 10.5

小结论:

1、线程数接近CPU核数能达到最好性能

2、java/protostuff序列化比反序列化性能都要好2倍左右

3、java序列化性能不理想,cpu跑满,也就10w左右,protostuff跟它完全不是一个量级,可以达到200w以上

相关推荐:

https://github.com/eishay/jvm-serializers/wiki (各种序列化对比测试,生成报表)

本文来源于"阿里中间件团队播客",原文发表时间" 2012-05-01"

相关文章
|
1月前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
78 5
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
147 2
|
1月前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 3
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
32 5
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
49 1
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
64 7
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
2月前
|
消息中间件 存储 Java
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
52 3