3

プロジェクトの1つでJavaオブジェクトをディープコピーする必要があります。これにシリアル化を使用しても大丈夫かどうか疑問に思いました。

オブジェクトはかなり小さく(それぞれ<1kb)、コピーあたりの合計#objectsは<500になり、コピールーチンは1日に数回呼び出されます。この場合、本番環境でこれにシリアル化を使用しても問題ありませんか、それともシリアル化のパフォーマンスを考えると、それでも本当に悪い考えですか?

それでも悪い考えである場合は、パフォーマンスを向上させるために、そのようなクラスごとにコピーコンストラクター/静的コピーメソッドを使用することを考えることができます。他に方法はありますか?

4

1 に答える 1

2

多分。パフォーマンスは問題になりません-依存関係があります。

シリアライゼーションの通常の問題は、アプリケーション内のコア クラスへの無害な参照によって、すべての life インスタンスの 90% のコピーが得られることです。これは、それらが突然到達可能になるためです。したがって、使用する参照には十分注意する必要がtransientあります。

さらに悪いことに、ディープ コピーと実際の状態の保存のためにシリアル化が必要な場合、互換性のない目標になる可能性があります。

  • ディープコピーは高速である必要があります
  • ディープ コピーは、開いているリソース (データベース接続) を処理できます。
  • 状態の保存は、API の進化を処理する必要があります (状態はディスクに保存され、新しいバージョンのコードで復元できます)。
  • 状態の保存は、読み取り可能なフォームを使用することでメリットが得られます (人間が間違いを修正できるようにするため)。

したがって、「巧妙なハック」を使用するよりも、コピー コンストラクターを使用する方が、現時点である程度/多くの時間を安全に保つことができる場合でも、多くの場合は優れています。

于 2012-05-14T10:08:30.427 に答える