私は自分の質問に答えようとします (Kyro はまだ非常に新しいです!)。
Restlet フレームワークを使用して実装された約 120 の異なる Web サービスのセットがあります。これらは、通常、Restlet ベースのクライアント ライブラリの上に構築された Web サービス クライアントによって使用されます。サーバーとクライアントの間でやり取りされる表現には、XML ( XStream シリアライゼーション ライブラリを使用)、JSON ( Jacksonを使用)、XHTML、Java オブジェクトシリアライゼーション、そして昨日の時点ではKryoが含まれます。したがって、私たちはいくつかの堅実な比較を行う立場にあります.
Kryo 1.0.1 はかなり安定しているようです。API の使用方法を実際に読んでみると、唯一の本当の問題は、デフォルトの java.util.Date シリアライザーが日付を数か月前に歪めているように見えることでした。独自のオーバーライドを提供する必要がありました。
kryo.register(Date.class,
new SimpleSerializer<Date>() {
@Override public void write (ByteBuffer b, Date d) { b.putLong(d.getTime()); }
@Override public Date read (ByteBuffer b) { return new Date(b.getLong()); }
});
しかし、それは私がこれまでに見つけた唯一の可能な問題でした。String、Float、Integer、Long、Date、Boolean、および List フィールドを持つ一連の JavaBeans があります。
ここにいくつかの大まかなベンチマークがあります。まず、1 つのテレビ番組を記述するオブジェクト階層のシリアル化と逆シリアル化を 100,000 回実行しました (つまり、その番組の 100,000 のディープ コピーを作成しました)。速度は次のとおりです。
XStream XML: 360/sec
Java Object Serialization: 1,570/sec
Jackson JSON: 5,000/sec
Kryo: 8,100/sec
次に、2,000 のテレビ番組の説明のカタログもシリアル化し、バイト数をカウントしました。
XStream XML: 6,837,851 bytes
Jackson JSON: 3,656,654 bytes
Kryo: 1,124,048 bytes
また、シリアライザーの登録が非常に重要であることもわかりました。
kryo.register(List.class);
kryo.register(ArrayList.class);
// ...
kryo.register(Program.class);
kryo.register(Catalog.class);
// ...
そうしないと、シリアライゼーションのサイズはほぼ 2 倍になり、速度はおそらく 40% 遅くなりました。
また、これら 4 つのシリアル化方法のそれぞれを使用して、いくつかの Web サービスの完全なエンド ツー エンド テストを実行し、Kryo が他の方法よりも高速に実行されることも示しました。
要約すると、Kryo はかなり堅牢なようです。コードベースでのサポートを維持し、経験を積むにつれて、より多くの場所で使用したいと考えています。Kryoチームに称賛を!
更新 (2011 年 3 月 9 日): Jackson 1.6 のバイナリ「Smile」シリアライザーを試すという @StaxMan の提案にようやくたどり着きました。Jackson 1.6 と Kryo 1.04 を使用して、多少異なるテレビ番組オブジェクト階層の 100,000 のディープ コピー (シリアル化/逆シリアル化) を行いました。
XStream XML: 429/sec 5,189 bytes
Jackson JSON: 4,474/sec 2,657 bytes
Kryo: 4,539/sec 1,066 bytes
Jackson Smile: 5,040/sec 1,689 bytes
このテストは、これらのオブジェクトの多くを配信する REST Web サービスでさまざまなシリアライザーを試したマクロ レベルのテストとは一致しませんでした。システム全体のスループットは、パフォーマンスに関する @StaxMan の直感をサポートしています。
Jackson JSON: 92 requests/sec
Jackson Smile 97 requests/sec
Kryo: 108 requests/sec