追加するペナルティはありますか
implements Serializable
Javaクラスに?インスタンス化されたオブジェクトのサイズまたはパフォーマンスに影響しますか?
追加するペナルティはありますか
implements Serializable
Javaクラスに?インスタンス化されたオブジェクトのサイズまたはパフォーマンスに影響しますか?
シリアル化/逆シリアル化を実行しない限り、パフォーマンスへの影響はありませんが、API設計に関してトレードオフがあります。
JoshuaBlochによる効果的なjavaから
- Serializableを実装する主なコストは、リリースされたクラスの実装を変更する柔軟性が低下することです。
- Serializableを実装するための2番目のコストは、バグやセキュリティホールの可能性を高めることです。
- Serializableを実装するための3番目のコストは、クラスの新しいバージョンのリリースに関連するテストの負担が増えることです。
これらがどの程度適用できるかは、ユースケースによって異なります。
あなた/他の誰かが実際にシリアル化/逆シリアル化しない限り、影響はありません。Serializable
単なるマーカーインターフェイスです。
おそらく、生成されたバイトコードのサイズが数バイト増えるだけです。
コストはゼロに近く、心配する価値はありません。
いくつかの詳細:
常に最初にメンテナンスのオーバーヘッドを考慮する必要があります。実稼働中にデプロイされたアプリケーションのコストは、それを開発するコストの数倍になる可能性があります。
この場合、クラスをシリアル化可能にするためのコストは、実際にはシリアル化に使用されないため、パフォーマンスコストよりもはるかに大きなバグや混乱を引き起こす可能性があります。たとえば、Serializableが不要であると判断するのに1分かかる、または誰かの時間がかかるとすると、これには、アプリケーションで発生する数ナノ秒の余分な起動時間よりもはるかに多くの費用がかかる可能性があります。
実際にシリアル化可能にする必要がある場合は、最初のケースのみが実際に必要な作業を実行するため、シリアル化不可能なバージョンと比較することはできません。
Serializable
単なる「マーカー」インターフェースです。メソッドを実装する必要はありません。
static final long serialVersionUID
唯一のことは、シリアル化APIを支援するためにを持っていることが推奨されるということです。これには、long
シリアル化されたクラスごとに1つの値がかかります。
JavaSerializationAPIに関するこの記事を確認することをお勧めします。シリアル化/逆シリアル化のほとんどの警告について詳しく説明します。