2

さて、私はWindowsで書かれたJavaプログラムを持っていて、それはうまく機能します。基本的にはアルゴリズムに関連しており、実行中は通常、ほぼ完全なCPU容量を消費します。これは正常です。

ただし、MacOSでは、大量のデータがあり、メモリ消費量が約240Mに達する特定の時点で、常にスタックします。プログラムはまだ実行中ですが、先に進みません。メモリは解放されませんが、CPU使用率は0に低下します。これが正確に何を意味するのかわかりません。また、何が起こっているのかわかりません。

申し訳ありませんが、これはコードの特定の部分に関する問題ではないため、コード部分を提供できません。JVMに精通している人なら誰でも、いくつかのヒント/アドバイスを与えることができますか?

4

2 に答える 2

3

私が最初にすることは、スレッドダンプを取り、誰が何をしているのかを調べることです。を発行しkill -3てスレッドダンプを取得するか、プロファイラーを接続することもできます。詳細については、この回答を参照してください:スレッドダンプ分析ツール/メソッド

何が起こっているのか理解できない場合は、ここにスレッドダンプを投稿することをお勧めします。

私の大げさな推測は、デッドロックのような並行性のバグですが、スレッドダンプを確認する必要があります。

于 2012-09-13T00:18:56.113 に答える
2

これが発生したときにハードドライブがビジーである場合は、JVMが使用可能な物理メモリを超えて使用しており、スワップファイルをスワップしているだけであることを意味します。スワッピングプロセス自体は多くのCPUを使用しませんが、多くのI/Oがプロセスに関与します。したがって、CPU使用率は低くなります。

ヒープサイズを使用可能な物理RAMに制限するようにしてください(JVMの起動時に4GBのマシンの空き容量が1GBしかない可能性があるため、合計に増やしないでください)。

于 2012-09-13T00:26:12.020 に答える