2011-12-14 58 views
1

我正在羣集上運行一個大的Java應用程序,並且我有很多可用的內存。因此,我計劃以最大的堆大小啓動我的JVM,並確保它可以正常工作。然而,我需要多次運行這個,我想知道在運行期間堆實際上有多大。我知道我可以用VisualVM這樣的工具來做到這一點,但如果我不想運行一個基於ui的大型應用程序呢?是否有一些參數可以發送給jvm,以便在我的應用程序終止後獲得某種內存統計信息?或者可能是一個基於命令行的應用程序,可以輕鬆完成它?如何在運行後找到Java堆的最大大小?

回答

3

jstat是你所追求的。它會每秒打印統計數據(或者您指定的任何數據),然後您可以分析輸出以找到最大值。

+0

哇,看起來很複雜... – jonalv 2011-12-14 10:43:08

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)); 
    } 
}