2

巨大なJavaオブジェクト(〜250M)で動作する複雑なアプリをデバッグして修正しています。

このオブジェクトは別のプログラムで作成しました。現在、XStream を使用してこのオブジェクトをハード ドライブから読み込んで保存していますが、解析に 1 分以上かかります。開発プロセスが遅くなります。

JAXB は高速ですか? この巨大なものをロードして保存する他の方法はありますか?

4

3 に答える 3

2

その場合、データをシリアル化して、データをより小さく、より高速にします。キークラスを外部化して、速度をさらに向上させることができます。これは私が最近行ったいくつかのテストですProtobuf vs Thrift vs Java Serialization kovicaと同じベンチマークですが、最近新しいハードウェア/ソフトウェアで実行しました。

高速化する必要がある場合は、メモリ マップド データを使用できます。これを扱うのははるかに困難ですが、パフォーマンスに勝るものはありません。データが既にディスク キャッシュにある場合、250 MB を数十ミリ秒で読み込むことができます。そうでない場合は、ドライブの速度によって制限されます。たとえば、低速の 40 MB/秒のドライブでは約 8 秒かかります。

私が書いたメモリ マップド ファイルを使用するライブラリはJava Chronicleです

于 2012-09-15T08:12:43.883 に答える
2

私は XStream を使用したことがありませんが、ドキュメントによると XML を生成しますよね? これらのオブジェクトを XML で保存する必要がありますか? オブジェクトをディスクに保存する必要があるだけの場合は、使用できるいくつかの異なるアプローチがあります。

  • Java シリアル化/外部化
  • クライオ
  • グーグルプロトコル
  • ...

こちらもご覧ください:ハイパフォーマンスシリアライゼーション: Java vs Google Protocol Buffers vs ...?

于 2012-09-15T07:50:18.460 に答える
1

他の人には Java シリアライズをお勧めします。(他のシリアライザーが一般的に行うように) 新しいオブジェクトを作成する代わりに、ヒープ内のオブジェクトを再利用すること (例: String のintern()メソッド) を利用できます。これにより、ペイロードの総量が減少します。

于 2012-09-15T08:05:59.207 に答える