38

追加するペナルティはありますか

implements Serializable

Javaクラスに?インスタンス化されたオブジェクトのサイズまたはパフォーマンスに影響しますか?

4

5 に答える 5

27

シリアル化/逆シリアル化を実行しない限り、パフォーマンスへの影響はありませんが、API設計に関してトレードオフがあります。

JoshuaBlochによる効果的なjavaから

  • Serializableを実装する主なコストは、リリースされたクラスの実装を変更する柔軟性が低下することです。
  • Serializableを実装するための2番目のコストは、バグやセキュリティホールの可能性を高めることです。
  • Serializableを実装するための3番目のコストは、クラスの新しいバージョンのリリースに関連するテストの負担が増えることです。

これらがどの程度適用できるかは、ユースケースによって異なります。

于 2012-05-03T09:39:11.937 に答える
25

あなた/他の誰かが実際にシリアル化/逆シリアル化しない限り、影響はありません。Serializable単なるマーカーインターフェイスです。

おそらく、生成されたバイトコードのサイズが数バイト増えるだけです。

于 2012-05-03T09:32:24.223 に答える
25

コストはゼロに近く、心配する価値はありません。

いくつかの詳細:

  • 各オブジェクトインスタンスのサイズは増加しません
  • クラス自体のサイズはわずかに増加しますが、これは1回限りのコストであるため、多数のインスタンスで償却する場合は簡単です。
  • 実行時にインターフェースチェックを実行する必要があるもの(リフレクション、インスタントルックアップ、インラインキャッシュへの追加のプレッシャーなど)には、わずかに追加の実行時コストがかかる場合があります。繰り返しますが、これはほとんどの目的で無視できる可能性があります。
  • Serializableはマーカーインターフェイスであり、実装する必要のあるメソッドはありません。その他のマーカーインターフェイスの例は、Clonable、SingleThreadModel、イベントリスナーです。
于 2012-05-03T09:37:02.690 に答える
2

常に最初にメンテナンスのオーバーヘッドを考慮する必要があります。実稼働中にデプロイされたアプリケーションのコストは、それを開発するコストの数倍になる可能性があります。

この場合、クラスをシリアル化可能にするためのコストは、実際にはシリアル化に使用されないため、パフォーマンスコストよりもはるかに大きなバグや混乱を引き起こす可能性があります。たとえば、Serializableが不要であると判断するのに1分かかる、または誰かの時間がかかるとすると、これには、アプリケーションで発生する数ナノ秒の余分な起動時間よりもはるかに多くの費用がかかる可能性があります。

実際にシリアル化可能にする必要がある場合は、最初のケースのみが実際に必要な作業を実行するため、シリアル化不可能なバージョンと比較することはできません。

于 2012-05-03T10:45:01.627 に答える
0

Serializable単なる「マーカー」インターフェースです。メソッドを実装する必要はありません。

static final long serialVersionUID唯一のことは、シリアル化APIを支援するためにを持っていることが推奨されるということです。これには、longシリアル化されたクラスごとに1つの値がかかります。

JavaSerializationAPIに関するこの記事を確認することをお勧めします。シリアル化/逆シリアル化のほとんどの警告について詳しく説明します。

于 2012-05-03T09:40:44.793 に答える