簡(jiǎn)介:
優(yōu)點(diǎn) | 缺點(diǎn) | |
---|---|---|
Kryo | 速度快甲捏,序列化后體積小 | 跨語(yǔ)言支持較復(fù)雜 |
Hessian | 默認(rèn)支持跨語(yǔ)言 | 較慢 |
Protostuff | 速度快演熟,基于protobuf | 需靜態(tài)編譯 |
Protostuff-Runtime | 無(wú)需靜態(tài)編譯鞭执,但序列化前需預(yù)先傳入schema | 不支持無(wú)默認(rèn)構(gòu)造函數(shù)的類(lèi)司顿,反序列化時(shí)需用戶(hù)自己初始化序列化后的對(duì)象,其只負(fù)責(zé)將該對(duì)象進(jìn)行賦值 |
Java | 使用方便兄纺,可序列化所有類(lèi) | 速度慢大溜,占空間 |
測(cè)試環(huán)境:
硬件信息:
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
測(cè)試數(shù)據(jù):(見(jiàn)附件)
ArrayList.class
MediaContent.class
Media.class
Image.class
測(cè)試方法:(參考自 https://github.com/eishay/jvm-serializers)
1、 在正式測(cè)試之前估脆,將測(cè)試用例運(yùn)行10次對(duì)JVM進(jìn)行預(yù)熱钦奋。
2、 對(duì)測(cè)試用例的每個(gè)方法疙赠,運(yùn)行2000次付材,取平均值。
3圃阳、 每次測(cè)試用例運(yùn)行500次厌衔,取最優(yōu)結(jié)果
測(cè)試基準(zhǔn):
ser: 創(chuàng)建一個(gè)對(duì)象,并將其序列化成byte數(shù)組的時(shí)間
deser: 將byte數(shù)組反序列化成對(duì)象的時(shí)間
total: 創(chuàng)建一個(gè)對(duì)象捍岳,將其序列化成byte數(shù)組再反序列化為對(duì)象的總時(shí)間
size: 序列化后的數(shù)組大小
size+dfl: 序列化后用level6級(jí)別的zlib進(jìn)行壓縮后的大小
測(cè)試工具:
序列化工具 | 序列化方式 |
---|---|
kryo | 使用kryo默認(rèn)的序列化方式fieldSerializer富寿,對(duì)需要序列化的對(duì)象采取默認(rèn)的操作。開(kāi)啟reference锣夹,關(guān)閉register |
protostuff | 使用靜態(tài)編譯生成的Schema進(jìn)行序列化 |
protostuff-runtime | 使用protostuff-runtime框架生成Schema進(jìn)行序列化 |
測(cè)試結(jié)果:
時(shí)間:
大幸承臁:
總結(jié):
Kryo在類(lèi)注冊(cè)且reference關(guān)閉的情況下,序列化速度和大小明顯 優(yōu)于hessian和java银萍,接近于protostuff变勇。開(kāi)啟reference后將序列化速度將明顯變慢,但仍舊優(yōu)于hessian贴唇。
相關(guān)知識(shí):
類(lèi)注冊(cè):將需要序列化的類(lèi)注冊(cè)到kryo中贰锁,可以提高序列化與反序列化的速度。
Reference:開(kāi)啟這個(gè)選項(xiàng)后滤蝠,相同的對(duì)象將被序列化為同一個(gè)byte[]豌熄,默認(rèn)關(guān)閉,如果要支持循環(huán)引用物咳,則必須開(kāi)啟
穩(wěn)定性測(cè)試:
測(cè)試用例(見(jiàn)附件)
循環(huán)引用:Cyclic.java
序列化方式 | 無(wú)默認(rèn)構(gòu)造函數(shù) | 循環(huán)引用 | 對(duì)象為null | 是否需要預(yù)先知道對(duì)象所屬的類(lèi) | 大對(duì)象(4M) |
---|---|---|---|---|---|
Kryo | 支持 | 需將reference選項(xiàng)打開(kāi) | 支持 | 不需要锣险,關(guān)閉register | 支持 |
Java | 支持 | 支持 | 支持 | 不需要 | 支持 |
Protostuff | 支持 | 支持 | 支持 | 不需要 | 支持 |
Protostuff**** -runtime | 不支持 | 支持 | 支持 | 需要 | 支持 |
Hessian | 支持 | 支持 | 支持 | 不需要 | 支持 |