5

私は最近、C++ と Java の「最適な」シリアライゼーション フレームワークを見つけようとして、いくつかのベンチマークを実行しています。私にとって「最高」を構成する要因は、逆シリアル化の速度と、シリアル化されたオブジェクトの結果のサイズです。

Java のさまざまなフレームワークの結果を見ると、結果の byte[] は通常、メモリ内のオブジェクト サイズよりも小さいことがわかります。これは、組み込みの Java シリアライゼーションの場合でも同様です。その後、他の製品 (protobuf など) を見ると、サイズはさらに小さくなっています。

C++ のサイズ (boost、protobuf) を調べたところ、結果として得られるオブジェクトが通常、元のオブジェクトより小さくない (場合によっては大きくなる) ことに非常に驚きました。

ここで何か不足していますか?Java では無料でかなりの量の「圧縮」ができるのに、C++ ではできないのはなぜですか?

nb Java でオブジェクトのサイズを測定するために、私は Instrumentation http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.htmlを使用しています。

4

2 に答える 2

3

データの絶対サイズを比較しましたか? Java の方がオーバーヘッドが大きいので、データをシリアル化されたバッファに「圧縮」すると、オーバーヘッドの量はさらに減少します。C/C++ では、物理データ サイズに必要な最小限のデータがほぼ揃っているため、圧縮の余地はあまりありません。実際、デシリアライズするには追加情報を追加する必要があり、結果としてサイズが大きくなる可能性さえあります。

于 2013-05-24T06:49:51.003 に答える