私のアプリケーションが実行中とそのステータスの間に生成するスレッドに関する質問があります。これらのデフォルトスレッドはすべて実行中であるべきですか?そして彼らは私のJVMを生き続けるのですか?
私はSwingアプリケーションを持っており、いくつかのテストシナリオでは、Java VisualVMを使用していくつかの奇妙な動作に気付きました。私のプログラムを何もしないで30分以上走らせると(ちょうど始めて走っていて)次のことに気付きました。
まず、スレッドタブでは、多くの生きているスレッドが見えます。
(とりわけ)読書 Default threads like, DestroyJavaVM, Reference Handler, Signal DispatcherとWhat are these threads which are spwaned when a Java application begins its execution?私はそこには非常に良い理由を持っているこれらのスレッドのほとんどを理解しています。 (私はまだ "RMI TCP"のものを理解しようとしています)
しかし、彼らの状態は疑問です。彼らの最初の6人が100%のランニング状態にあったのは普通ですか?
また、これらのスレッドのいずれかがヒープ消費量を次のように説明できますか?
私は*。のHashMap $エントリとTreeMapの$エントリのインスタンスの多くがsun.rmiというから発信ライブラリで参照され、作成されていることに気づいたと私はそれが「RMI TCP」のスレッドに関連すると考えていました。.. 。
最後に、メインJFrameを破棄しようとすると、フレーム自体が表示されなくなりますが、アプリケーションはまだ実行されています....これらのスレッドが理由(またはその一部) ??
ありがとうございます。
1を参照してください! JFrameについては、私はEXIT_ON_CLOSEを使うことができると知っていますが、より大きなフレームワークによってアプリケーションcoulbが呼び出され、EXIT_ON_CLOSEだけを使用すると、JVMインスタンス全体が強制終了されます。最後の表示可能なフレームのdispose()は、アプリケーションをとにかく終了させるはずです。 – mdm
@mdm:私はSwingのエキスパートではありませんが、['Window.dispose()'](http://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#dispose ()):*注意:Java仮想マシン(VM)内の最後の表示可能なウィンドウが破棄されると、VMが終了することがあります。* –
この回答のアドバイスは素晴らしいですが、私はうそをつくつもりはありません - あなたはTL; DR ;-)を使用しているため純粋に+1に投票しました –