サードパーティ API からクラスのインスタンスを何千も作成する必要がある状況があります。新しいインスタンスごとに新しいスレッドが作成されます。スレッドが 1000 を超えると、OutOfMemoryError が発生し始めます。ただし、アプリケーションでは 30,000 のインスタンスを作成する必要があります。各インスタンスは常にアクティブです。アプリケーションは、8 GB の RAM を備えた 64 ビットの Linux ボックスにデプロイされ、アプリケーションで使用できるのは 2 GB のみです。
サード パーティのライブラリのしくみでは、新しい Executor フレームワークやスレッド プーリングを使用できません。
では、どうすればこの問題を解決できますか?
スレッド プールの使用はオプションではないことに注意してください。イベントをキャプチャするために、すべてのスレッドが常に実行されています。
Linux ボックスのサイン メモリ サイズは私の制御範囲ではありませんが、32 GB システムでアプリケーションに 25 GB を使用できるように選択した場合、問題は解決しますか?
上記のシナリオに最適な Java 設定はありますか?
システムは Oracle Java 1.6 64 ビットを使用します。