14

私は高度なJavaに不慣れなので、ご容赦ください。

「自律型」と呼ばれる機能を実装する Java の機能に興味があります。2 つの Java プログラムを実行しているとします。そして、一方のプログラムが他方のプログラムがメモリを占有していると判断し、そのプログラムを強制終了したり、JVM により多くのメモリを割り当てたりします。

Java では、利用可能なメモリが何であるかを確認できることを知っています ( Java で CPU とメモリの使用状況を確認する方法を参照してください)。

ありがとうございました。

4

4 に答える 4

11

あなたの質問: - JVM の使用可能なメモリを増やしたり、他の Java プログラムを強制終了したりすることは可能ですか?

  1. はい可能です 次のjvmようなヒープサイズを増やすことができます:

          java -Xmx512M ClassName //512M = memory you want to increase
    
  2. 次のようなプロセスを強制終了するには:taskkill /F /IM <processname>.exe


->しかし、ガベージ コレクターのポリシーに応じて、ヒープが固定サイズまたは拡張される可能性があるため、これはお勧めできません。
->コマンドプロンプトタイプtaskkill/?を開いて詳細を確認してください。

3. そして 、この方法で現在予約されている合計メモリ空きメモリ、および最大メモリを確認できます。jvm

          int  MegaBytes = 1024*1024 ;

          long  freeMemory = Runtime.getRuntime().freeMemory() / MegaBytes;
          long  totalMemory = Runtime.getRuntime().totalMemory() / MegaBytes;
          long  maxMemory = Runtime.getRuntime().maxMemory() / MegaBytes;

          System.out.println("Memory used by JVM: " + (maxMemory - freeMemory));
          System.out.println("freeMemory in JVM: " + freeMemory);
          System.out.println("totalMemory in JVM : " + totalMemory);
          System.out.println("maxMemory in JVM: " + maxMemory);

詳細については、こちらをご覧ください

于 2013-06-20T05:01:13.913 に答える
9

1. JVM のメモリを増やす

次のコードを使用して、Java で初期ヒープ サイズと最大ヒープ サイズを指定できます。

java -Xms64m -Xmx256m ...

この中で

-Xms<size> specifies the initial Java heap size
-Xmx<size> the maximum Java heap size.

2. プログラムの簡単なメモリ使用量を確認する

コンピュータに jdk をインストールすると、実行中のすべての Java プログラムのメモリ、ヒープ スペースを示す非常に便利なツールがあります。

Java ビジュアル VM

http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/

jdk のインストール済みの bin フォルダーにあります。

以前の stackoverflow の投稿も 、Java アプリケーションによる自身のメモリ使用量の監視に役立つはずです

于 2013-06-20T03:27:45.617 に答える
4

あなたの質問の「自律的」部分に関しては、制限はありますが、Java 内からプロセス管理を行うことは実際に可能です。

  • 管理対象のすべてのプロセスが を使用して Java アプリケーション内から常に開始されていると仮定すると、強制 終了するプロセスで メソッドをProcessBuilder.start()使用できます。詳細については、この回答を参照してください。destroy()

  • プロセスのメモリが多すぎる時期を検出することは、プロセスに関する情報を収集できることを意味します。問題は、オペレーティング システムからしか情報にアクセスできないことです。必然的に、何らかのコマンドまたはサードパーティのツールを使用して取得する必要があります。詳細については、この他の回答をご覧ください。

  • あいまいに関連していますが、シャットダウンフックを使用すると、アプリケーションを閉じたときにいくつかの重要な作業を自動的に行うことができます。たとえば、開いたままのドキュメント/ファイルを保存/閉じる。この関連する回答で詳細を読むことができます。

それが役立つことを願っています。

于 2013-11-02T23:33:17.080 に答える
1

プログラムを実行しようとするときに -XmsMBm を追加してみてください。例 java -Xms64m ClassName

于 2013-11-01T13:06:46.117 に答える