0

実行中の Java アプリケーションを強制的にコンソールからガベージ コレクションできますか?

いくつかの返信を先取りするために:

  • JVisualVMでできることはわかっていますが、X-Windowsアクセスではなくコンソールアクセスしかありません
  • System.gc() がガベージ コレクションを要求するだけで、それを強制しないことはわかっていますが、それは機能しているように見えるので、その外部呼び出しの方法を探しています。
  • 動作中のアプリケーションをガベージ コレクションするべきではないことはわかっています。メモリ リークの可能性をチェックするプロセスの一環としてこれを行っています。
  • アプリケーションは本番環境で実行されていますが、その環境、jvm ecetera を変更できません
4

5 に答える 5

2

System.gc() のみを実行する単純な Java エージェントを作成します。pid を使用してターゲット JVM に接続し、実行します。ここから開始: http://docs.oracle.com/javase/6/docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html

于 2013-01-23T09:36:27.437 に答える
2

JVisualVM は、次の場合にリモート プロセスに接続できます。

  • 関連するポートが開いている
  • Java プロセスは、リモート接続を許可する正しいパラメータで開始されました

したがって、魔法を実現するために、同じマシン上の xWindows 環境にいる必要はありません...

Java に渡す例またはパラメータ

-Dcom.sun.management.jmxremote.port=9005\   
-Dcom.sun.management.jmxremote.authenticate=false\ 
-Dcom.sun.management.jmxremote.ssl=false
于 2013-01-23T08:59:53.383 に答える
2

実際には、JDK の jmap ツールがフル GC をトリガーします。jmap histo を試す

于 2013-01-23T11:55:50.187 に答える
1

いいえ、ガベージ コレクタにガベージ コレクションを強制することはできません。System.gc() を使用すると、ガベージ コレクターにガベージ コレクションの実行を要求することしかできません。

于 2013-01-23T08:59:22.573 に答える
-1

プログラムを Oracle JRockit JVM で実行することを検討してください。そこでは、JRCMD を使用して、GC の強制を含む JVM レベルの管理コマンド/監視を発行できます。そうです、(JRockit やその他の環境では) System.gc() は必ずしも何もしませ!

于 2013-01-23T09:30:51.420 に答える