[java]序列化框架性能對比(kryo、hessian、java、protostuff)


序列化框架性能對比(kryo、hessian、java、protostuff)

簡介:

 

優點

缺點

Kryo

速度快,序列化后體積小

跨語言支持較復雜

Hessian

默認支持跨語言

較慢

Protostuff

速度快,基於protobuf

需靜態編譯

Protostuff-Runtime

無需靜態編譯,但序列化前需預先傳入schema

不支持無默認構造函數的類,反序列化時需用戶自己初始化序列化后的對象,其只負責將該對象進行賦值

Java

使用方便,可序列化所有類

速度慢,占空間

     
     
     

 

測試環境:

硬件信息:

         16 Intel(R) Xeon(R) CPU E5620 @2.40GHz

         Red Hat Enterprise Linux Server release 5.4 (Tikanga)

         java:  "1.6.0_27" Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)

         JVM options: java -Xmx256m –server

測試數據:(見附件)

         ArrayList.class

         MediaContent.class

         Media.class

         Image.class

測試方法:(參考自https://github.com/eishay/jvm-serializers

<!--[if !supportLists]-->1、  <!--[endif]-->在正式測試之前,將測試用例運行10次對JVM進行預熱。

<!--[if !supportLists]-->2、  <!--[endif]-->對測試用例的每個方法,運行2000次,取平均值。

<!--[if !supportLists]-->3、  <!--[endif]-->每次測試用例運行500次,取最優結果

測試基准:

         ser:           創建一個對象,並將其序列化成byte數組的時間

         deser:       將byte數組反序列化成對象的時間

         total:        創建一個對象,將其序列化成byte數組再反序列化為對象的總時間

         size:          序列化后的數組大小

         size+dfl:   序列化后用level6級別的zlib進行壓縮后的大小

測試工具:

序列化工具

序列化方式

kryo

使用kryo默認的序列化方式fieldSerializer,

對需要序列化的對象采取默認的操作。開啟reference,關閉register

protostuff

使用靜態編譯生成的Schema進行序列化

protostuff-runtime

使用protostuff-runtime框架生成Schema進行序列化

   

 

 

測試結果:

         時間:


 

         大小:


總結:

         Kryo在類注冊且reference關閉的情況下,序列化速度和大小明顯 優於hessian和java,接近於protostuff。開啟reference后將序列化速度將明顯變慢,但仍舊優於hessian。

相關知識:

         類注冊:將需要序列化的類注冊到kryo中,可以提高序列化與反序列化的速度。

         Reference:開啟這個選項后,相同的對象將被序列化為同一個byte[],默認關閉,如果要支持循環引用,則必須開啟

 

 

穩定性測試:

    測試用例(見附件)

         循環引用:Cyclic.java

序列化方式

無默認構造函數

循環引用

對象為null

是否需要預先知道對象所屬的類

大對象(4M)

Kryo

支持

需將reference選項打開

支持

不需要,關閉register

支持

Java

支持

支持

支持

不需要

支持

Protostuff

支持

支持

支持

不需要

支持

Protostuff

-runtime

不支持

支持

支持

需要

支持

Hessian

支持

支持

支持

不需要

支持

 

via http://x-rip.iteye.com/blog/1555293


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM