我試圖找出編程的最大permgen和最大堆大小與我的程序的JVM已被調用,而不是他們目前可用。如何從JVM獲取堆和permgen的最大大小?
有沒有辦法做到這一點?
我熟悉Java運行時對象中的方法,但不清楚它們實際上提供了什麼。
另外,有沒有辦法問Eclipse爲這兩個分配了多少?
我試圖找出編程的最大permgen和最大堆大小與我的程序的JVM已被調用,而不是他們目前可用。如何從JVM獲取堆和permgen的最大大小?
有沒有辦法做到這一點?
我熟悉Java運行時對象中的方法,但不清楚它們實際上提供了什麼。
另外,有沒有辦法問Eclipse爲這兩個分配了多少?
試試這個的:
MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
mem.getHeapMemoryUsage().getUsed();
mem.getNonHeapMemoryUsage().getUsed();
但他們只提供快照數據,而不是cummulated值。
嘗試這樣的事情了最大燙髮根:
public static long getPermGenMax() {
for (MemoryPoolMXBean mx : ManagementFactory.getMemoryPoolMXBeans()) {
if ("Perm Gen".equals(mx.getName())) {
return mx.getUsage().getMax();
}
}
throw new RuntimeException("Perm gen not found");
}
對於最大堆,可以從運行時得到這個,但你也可以使用適當的MemoryPoolMXBean。
請注意,非堆內存還包含代碼緩存,它與Permanent Generation分開。 (至少在Sun的JVM中) – 2010-01-07 21:50:34