來源:http://john521.iteye.com/blog/1099574
有一個很不錯的工具http://github.com/eishay/jvm-serializers/ ,可以用它來評測各種流行的java序列化反序列化工具,使用上也很簡單。想試試該工具的,下載下傳源碼後參考起README操作即可。而我更關心的是,是各種工具的性能對比,以作選擇的一個衡量标準,也就是http://github.com/eishay/jvm-serializers/wiki 的
圖示和資料。本文也就簡單轉摘其圖示,圖示中的java-manual指的是根據對象(資料)格式手工操作(當然是最快的,但不具有通用性),java- buildin-in就是内置的序列化方式(ObjectOutputStream、ObjectInputStream),其他工具的使用版本可以檢視 其wiki。
建立一個對象,将其序列化成一個位元組數組,然後再反序列化成一個對象。
建立一個對象,将其序列化成一個位元組數組。
相比于序列化,反序列化更耗時。為了更公平的比較,jvm-serializers在反序列化測試時通路了反序列化得到的對象的所有字段(也就是deep的含義),因為部分工具反序列化時“偷懶”而沒有做足工作。
序列化資料的大小,這個大小會依賴于使用的資料。
使用java内置的DEFLATE(zlib)壓縮的序列化資料的大小。
對象建立耗時很短(平均100納秒)是以通常的比較沒什麼意義。不過,不同工具建立的對象在表現上會有不同。有的工具隻是建立普通的java類,你可以直接通路其字段,而有的使用get/set方法,有的使用builder模式。
分析這些對比,java内置的序列化方式性能很差(這才催生了各種序列化工具)。在這些工具中,protostuff表現極為出色,蓋過了名頭響亮 的protobuff和thrift。通用格式中,json要比xml強不少,而不同工具對同樣格式的性能表現也有差别,這也給了選擇工具的一個指導。另 一個值得一提的是bson,盡管jvm-serializers沒有包含它,相信性能上應該不錯。也可以參考jvm-serializers已有工具評測 代碼的實作,添加比如處理bson、php等格式的序列化工具的評測。