反復ごとに40ミリ秒のタイムキャップを持つタイムクリティカルなアプリケーションに取り組んでいます。タイムキャップを1回だけ超えると、アプリケーションは終了し、ゲームオーバーになります。アプリケーション自体は40ミリ秒のマークを下回っていても問題はありません。制限を超えるのは、ガベージコレクターである場合があります。
ファクトリパターンと組み合わせたオブジェクトプールを使用して、ガベージコレクションの必要性をほとんどなくすことができ、アプリケーションは、アプリケーションが1つの完全なGCを開始した後の10〜20回の反復を除いて、小さなGCの実行を含む安定した17ミリ秒の反復時間を達成します。 40ミリ秒を超えて発生し、アプリケーションを強制終了します。
私の質問は、この1つの完全なGCの原因を正確に分析するにはどうすればよいですか?jvisualvmを集中的に使用して、ランタイムとメモリフットプリントのプロファイルを作成しました。これは、キャッシュする必要のあるオブジェクトを特定するのに非常に役立ちました。しかし、この特定のケースでは、jvisualvmで適切なボタンを押すことができるずっと前に、完全なGCが発生するため、使用できません。プログラムでヒープダンプを生成する方法はありますか?