私は最近
、ピーター・ローリーがホストするブログを見つけました。 JVMでのコードのパフォーマンスに関する興味深い情報を見つけることができます。
そこで、オブジェクトを再利用するという異常なアプローチを見つけました。 彼はいくつかの理由で不慣れです。
- オブジェクトの作成は非常に高速であるため、注意を払ってはならないことは一般に受け入れられています
- このアプローチはめったに使用されず、これには理由がなければなりません。
しかし、この概念の利点を見ることができる領域があります。 これは、オブジェクトのシリアル化(または、逆シリアル化)です。 実際、この場合、新しいオブジェクトが絶えず作成され、生産性に悪影響を及ぼします。 さらに、このプロセスはデータをCPUキャッシュから強制的に削除します。
参照により、テストコードを見つけることができます(Kotlin:trollface :)。 このコードは、ByteBufferからオブジェクトのコレクションをデシリアライズします。 結果は昇順でソートされます。

ご覧のとおり、新しいオブジェクトを作成する必要がある場合、逆シリアル化に時間がかかります。 時々、違いは非常に顕著です。 ただし、新しい機能を作成すると、オーバーヘッドが増え、GCが頻繁にトリガーされることになります。

このグラフは、最悪の5%を示しています。 違いは、GCのトリガーによるものです。