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

测试环境:4xXeonE55202.27GHz,7.3GB虚拟机

测试结果:

一、采用java内置序列化:

tps(w)threadcpu(%)load
8.9122.30.8
15.5246.31.64
21369.72.88
23488.53.5
20.55704.2
19.56715
207676.28
20.58646.5
20.540707.5

JAVA内置反序列化:

tpc(w)threadcpu(%)load
2124.61.1
3.852491.9
5.83722.8
7.65496.64
7.6596.84.5
7.6696.96.3
7.6797.17.2
7.68989
7.6409714.5

二protostuff序列化

tpc(w)threadcpu(%)load
5419.81
1052220.8
1503411.8
1904522.44
1805663.6
2006765
240785.75.1
250894.35.3
270409917

protostuff反序列化

tpc(w)threadcpu(%)load
381110.9
71228.71.6
973491.9
142457.72.5
1505653.7
1606734.6
1707816.8
1778896.5
175409310.5

小结论:

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

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

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

相关推荐:

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