[英]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.