2011-12-14 10 views
1

私はクラスタ上で大きなJavaアプリケーションを実行しています。したがって、JVMを最大限のヒープサイズで起動し、動作することを確認します。しかし、私はこれを何回も実行する必要があり、実行中に実際にヒープがどれだけ大きくなったのかを知りたい。私はVisualVMのようなツールでこれを行うことができますが、私は大きなUIベースのアプリケーションを実行したくない場合はどうしたらいいですか?私のアプリケーションが終了した後、この種のメモリ統計を取得するためにjvmに送ることができるいくつかのパラメータがありますか?または、簡単に実行できるコマンドラインベースのアプリケーションですか?実行後にJavasヒープの最大サイズを調べるにはどうすればよいですか?

答えて

1

はあなたのようなものを使用してアプリケーションをプロファイルする必要があります);

1

Uは、ヒープサイズ

Runtime.getRuntime()の値を取得する方法以下これを利用することができますtotalMemory(:

2

あなたは、アプリケーション内からそれを行うことができます:

ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); 

は、次に返さMemoryUsageオブジェクト上getCommitted()getUsed()getMax()メソッドを使用します。プログラムの

0

総使用/空きメモリはランタイムがメモリに関するいくつかの方法を有するjava.lang.Runtime.getRuntime();

を介してプログラムを得ることができます。次のコード例は、その使用方法を示しています。

ランタイムには、メモリに関連するいくつかの方法があります。次のコード例は、その使用方法を示しています。

import java.util.ArrayList; 
import java.util.List; 

public class PerformanceTest { 
    private static final long MEGABYTE = 1024L * 1024L; 

    public static long bytesToMegabytes(long bytes) { 
    return bytes/MEGABYTE; 
    } 

    public static void main(String[] args) { 
    // I assume you will know how to create a object Person yourself... 
    List<Person> list = new ArrayList<Person>(); 
    for (int i = 0; i <= 100000; i++) { 
     list.add(new Person("Jim", "Knopf")); 
    } 
    // Get the Java runtime 
    Runtime runtime = Runtime.getRuntime(); 
    // Run the garbage collector 
    runtime.gc(); 
    // Calculate the used memory 
    long memory = runtime.totalMemory() - runtime.freeMemory(); 
    System.out.println("Used memory is bytes: " + memory); 
    System.out.println("Used memory is megabytes: " 
     + bytesToMegabytes(memory)); 
    } 
} 
関連する問題