大量 (数百万) の存続期間の長いオブジェクトを持つアプリケーションのヒープ サイズの使用をどのように最適化しますか? (大きなキャッシュ、データベースから大量のレコードをロードする)
- 適切なデータ型を使用する
- 他のデータ型を表すために java.lang.String を避ける
- オブジェクトの重複を避ける
- 値が事前にわかっている場合は列挙型を使用します
- オブジェクト プールを使用する
- String.intern() (良いアイデア?)
- 必要なオブジェクトのみをロード/保持
一般的なプログラミングまたは Java 固有の回答を探しています。ファンキーなコンパイラ スイッチはありません。
編集:
ヒープに何百万回も出現する可能性のある POJO のメモリ表現を最適化します。
ユースケース
- 巨大な csv ファイルをメモリにロードします (POJO に変換されます)
- Hibernate を使用してデータベースから何百万ものレコードを取得する
回答の再開:
- フライウェイト パターンを使用する
- コピーオンライト
- 3 つのプロパティを持つ 10M オブジェクトをロードする代わりに、サイズが 10M の 3 つの配列 (または他のデータ構造) を持つ方が効率的ですか? (データを操作するのは面倒かもしれませんが、メモリが本当に不足している場合は...)