jvm-serializers提供了一个很好的比较各种Java序列化的的测试套件。 它罗列了各种序列化框架, 可以自动生成测试报告。
我在AWS c3.xlarge机器上进行了测试,一下是测试报告与解析。
关键的测试数据的统计代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public double runWithTimeMeasurement(int timeMillis, TestCase tc, int iterations) throws Exception { long start = System.currentTimeMillis(); double sumTime = 0; int count = 0; System.err.println("test-time "+timeMillis+" iteration "+iterations); while ( System.currentTimeMillis()-start < timeMillis ) { double time = tc.run(transformer, serializer, value, iterations); sumTime += time; measurementVals[count] = time; count++; } double avg = sumTime / count; Arrays.sort(measurementVals,0,count); System.err.println("-----------------------------------------------------------------------------"); System.err.println(serializer.getName()); System.err.println("min:" + measurementVals[0]); System.err.println("1/4:"+measurementVals[count/4]); System.err.println("1/2:"+measurementVals[count/2]); System.err.println("3/4:"+measurementVals[count/4*3]); System.err.println("max:"+measurementVals[count-1]); System.err.println("average:"+ avg +" deviation:"+(avg-measurementVals[count/2])); System.err.println("-----------------------------------------------------------------------------"); return avg; }
|
测试时序列化和反序列化会迭代多次,默认2000次。 测试会有一个限定时间,一轮测试完成后时间还有的话还会继续新的一轮的测试。 因此, 由于不同的框架花费的时间不同, 测试的轮数也不一样。
阅读全文