簡體   English   中英

運行后如何找到Java堆的最大大小?

[英]How can I find max size of Javas heap after run?

我正在群集上運行一個大型Java應用程序,並且有很多可用內存。 因此,我計划以巨大的最大堆大小啟動JVM,並查看它是否有效。 但是我需要多次運行,並且我想知道運行期間堆實際上變成了多少。 我知道我可以使用VisualVM之類的工具來執行此操作,但是如果我不想運行基於ui的大型應用程序怎么辦? 我的應用程序終止后,是否可以將某些參數發送給jvm以獲取此類內存統計信息? 還是可以輕松完成基於命令行的應用程序?

jstat是您所追求的。 它將每秒(或您指定的任何時間)打印統計信息,然后您可以分析輸出以找到最大值。

您可以從應用程序中執行此操作:

ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();

然后在返回的MemoryUsage對象上使用getCommitted()getUsed()getMax()方法。

U可以使用以下方法獲取堆大小的值

Runtime.getRuntime()。totalMemory();

可以通過java.lang.Runtime.getRuntime();在程序中獲取程序的總已用/可用內存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));
  }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM