私が現在取り組んでいるプロジェクトには、既存のオブジェクトのディープ コピーを取得するためにシリアル化された多くのオブジェクトがあります。これは、コンポーネント間で 100、200、または 1000 の呼び出しがある場合に、実行時に複数の呼び出しが発生するまでは正常に機能し、これがパフォーマンスの頭痛に見舞われる場所です。
これらのオブジェクトをクローンとしてコピーする歴史的な理由は、異なる機能の下で同じオブジェクトで動作する 2 つの異なるコンポーネントが互いに変更されるべきではないことです。たとえば、Swing UI の変更は、保存または同期ボタンが押されるまでバックエンドのオブジェクト値を変更してはなりません。
私たちにはかなり大きなコード ベースがあります。リフレクションに基づいてクローンを記述すれば、シリアル化に比べて高速に動作すると思いましたが、オブジェクトの複雑な階層またはその他の理由により、このアプローチはさらに遅くなります。
CloneUtils (sourceforge プロジェクト) も使用してみましたが、これも低速です (Hibernate はまったく使用していません)。Spring BeanUtils はオプションではありません (ドキュメントから、Bean のみを使用すると想定しています。
別のコピーで作業しながら、パフォーマンスを向上させます。シリアライゼーションの代わりに独自のコピー メソッドを提供する場合に高速化するオプションがありますが、これには、これらのメソッドを毎回更新するという欠点があり、忘れると機能が失われる可能性があります。