测试方法: 对一个含16个Integer/String/Date类型字段的扁平对象作序列化/反序列化,单机多线程循环执行,用循环一定次数之后sleep(1)控制频率,每隔1秒统计一次执行次数,并观察CPU/LOAD/内存等指标(因内存恒定开销,忽略掉)。测试环境:4 x Xeon E5520 2.27GHz, 7.3GB 虚拟机测试结果:一、采用java内置序列化:
tps(w)threadcpu(%)load8.9122.30.815.5246.31.6421369.72.8823488.53.520.55704.219.56715207676.2820.58646.520.540707.5
JAVA内置反序列化:
tpc(w)threadcpu(%)load2124.61.13.852491.95.83722.87.65496.647.6596.84.57.6696.96.37.6797.17.27.689897.6409714.5
二 protostuff序列化
tpc(w)threadcpu(%)load5419.811052220.81503411.81904522.441805663.62006765240785.75.1250894.35.3270409917
protostuff反序列化
tpc(w)threadcpu(%)load381110.971228.71.6973491.9142457.72.51505653.71606734.61707816.81778896.5175409310.5
小结论:1、线程数接近CPU核数能达到最好性能2、java/protostuff序列化比反序列化性能都要好2倍左右3、java序列化性能不理想,cpu跑满,也就10w左右,protostuff跟它完全不是一个量级,可以达到200w以上相关推荐:
https://github.com/eishay/jvm-serializers/wiki (各种序列化对比测试,生成报表)
本文来源于"阿里中间件团队播客",原文发表时间" 2012-05-01"