DestroyJavaVMスレッドは常に実行されています 質問する

DestroyJavaVMスレッドは常に実行されています 質問する

アプリケーションをプロファイリングしているときに、奇妙な動作に遭遇しました。DestroyJavaVM スレッドが常に (100% の時間) 実行されているのです。

ここに画像の説明を入力してくださいこの件について少し調べてみたところ、ネット上には有益な情報はほとんどなく、私が理解したのは、このスレッドは終了時にJVMをアンロードする

もしそうなら、なぜこのスレッドはアプリケーションを起動した瞬間から常に 100% RUNNING 状態になっているのでしょうか? 貴重なリソースを消費し、そのためOutOfMemoryError(私が時々経験するような) 問題を引き起こすのではないでしょうか?

このスレッドが実際に何を実行し、何がその初期化をトリガーするかについての公式リファレンスはありますか?

ありがとう

ベストアンサー1

これは、ほとんどのアプリケーションがスレッドで実行されるために発生します。

全てポジョアプリはメソッドを呼び出すことで開始しますmain。最も単純なケースでは、このメソッドがオブジェクトの作成、メソッドの呼び出しなど、すべての作業を実行します。完了すると、すべての処理を待機するスレッドmainを使用してJVMをシャットダウンするように指示されます。DestroyJavaVM非デーモンスレッド作業を実行する前に完了する必要があります。これは、JVM が破棄される前に、作成した非デーモン スレッドが完了することを保証するためです。

ただし、GUI を備えたアプリは通常、複数のスレッドとして実行されます。1 つはキーボードやマウスのイベントなどのシステム イベントを監視するためのものです。もう 1 つはウィンドウやディスプレイを維持するためのものです。mainこの種のアプリのメソッドは、おそらく必要なスレッドをすべて起動して終了するだけです。スレッドは作成されますDestroyJavaVMが、VM を破棄する前に、作成したスレッドがすべて完了するのを待つだけです。

その結果、スレッドを作成し、その機能のみに依存するアプリでは、常にDestroyJavaVM終了を待つスレッドが存在します。実行中のjoin他のすべてのスレッドを実行するだけなので、リソースは消費されません。

おすすめ記事