2009-04-15 1 views
11

JAR(Windows BATが使用されている)からプログラムを起動するにはどうすればJavaのガベージコレクションを外部から要求できますか?私はSystem.gc() Windowsのコマンドラインから実行するとJVMガベージコレクション(コードからではありません)を要求する方法

  • JNLP分布を実行しているとき、私はこの「Javaコンソールは、」コントロールパネル/ジャワからオンにGET/...と、このJavaコンソールがマニュアルゴミを提供してそれを行うことができ、Javaコードから

    • コレクション。

    しかし、私がコマンドライン/ batからjarを実行しているときに、Javaコンソールが開かないようです。簡単なグーグルでヘルプを見つけることができませんでした。

  • 答えて

    9

    jconsoleを使用して、ローカルで実行されているJVMに接続することができます。これにより、GUIで「Perform GC」ボタンが提供されます。

    javaプロセスを開始するときに-Dcom.sun.management.jmxremoteを指定する必要があります。

    +0

    おかげで、正常に動作するようです! – Touko

    5

    最新のJava 6を使用している場合、jconsole機能を補完して拡張するjvisualvmもあります。どちらも非常に便利なツールです。

    1

    通常、ガベージコレクションを強制する理由はありません。そうすることで、ガベージコレクタアルゴリズム(主にそのパフォーマンス)が失われます。また、ゴミが収集されている間にプログラムの速度が低下します。メモリに問題がある場合は、メモリトレースツールを使用して参照が保持されている場所を調べる必要があります。 (リスナーは登録されていませんか?)

    他の回答と同様に、jconsoleまたはjvisualvmを使用できます。 jmxを使用してプログラムで実行することもできます。

    +0

    GC収集を強制するための多くの正当な用途があります。 1つはテスト目的です。別の例:SSDスワップを使用して低メモリシステムで開発している場合。 Javaはメモリが "高速メモリ"かスワップかどうかはわかりません。 Javaは自動的にGCを起動する前にすべての空きメモリーを使用する傾向があります。この場合、GCを手動で起動すると多くの手助けをすることができます。明らかに、サーバープロダクション使用のどのような場合でも推奨されません(少なくとも私は今はイメージできません)。 –

    3

    純粋にコマンドラインの手法では、jcmdを使用できるはずです。私はjcmdが少なくともJava 1.7以降の標準JDKインストールの一部であると信じています。

    jcmd <process-id> GC.run 
    

    あなたはjcmdこのような特定のプロセスのために提供可能な診断コマンドのリストを取得することができます::コマンドはこのようなものになるだろう

    jcmd <process-id> help 
    
    関連する問題