可能重複:
Read Java JVM startup parameters (eg -Xmx)如何在運行時讀取XX:MaxPermSize?
我們有一個桌面應用程序,其中一些老設備不具備相應的內存設置。
他們在「隨機」時間中經歷了燙髮gen空間,我需要警告運行過低MaxPermSize的用戶,但我無法弄清楚如何從jvm訪問此設置。
可能重複:
Read Java JVM startup parameters (eg -Xmx)如何在運行時讀取XX:MaxPermSize?
我們有一個桌面應用程序,其中一些老設備不具備相應的內存設置。
他們在「隨機」時間中經歷了燙髮gen空間,我需要警告運行過低MaxPermSize的用戶,但我無法弄清楚如何從jvm訪問此設置。
這應該給你如何做到這一點
一個粗略的想法public class Main {
public static void main(final String[] args) {
final RuntimeMXBean memMXBean = ManagementFactory.getRuntimeMXBean();
final String prefix = "-XX:MaxPermSize=";
final List<String> jvmArgs = memMXBean.getInputArguments();
String maxPermSize = null;
for (final String jvmArg : jvmArgs) {
if (jvmArg.startsWith(prefix)) {
maxPermSize = jvmArg.substring(prefix.length());
break;
}
}
System.out.println("MaxPermSize is " + maxPermSize);
}
}
這不起作用,據我所知,沒有可用的系統屬性。我打印了所有系統屬性http://pastie.org/5376306,以-XX:MaxPermSize = 192m作爲參數啓動java -jar「C:\ Java \ hack \ MemoryTest \ dist \ MemoryTest.jar」-XX:MaxPermSize = 192m – user1035344
您提供的網址與您無法使用的溶劑無關。 – kel
首先,我建議你連接JConsole或VisualVM。有沒有辦法爲您確定您的應用程序(程序)PermGen的大小。另一種方法是使用MemoryMXBean,但它可以做簡單的內存報告,但堅持使用我提到的工具來獲取更詳細的圖片。
所以,如果你要爲MemoryMXBean那就試試這個代碼
MemoryMXBean memMXBean = ManagementFactory.getMemoryMXBean();
memMXBean.getHeapMemoryUsage().getUsed();
memMXBean.getNonHeapMemoryUsage().getUsed();
它告訴你快照數據不是commulated值:)
這不會讓我真正讓我得到MaxPermSpace,只是當您說出現在使用的內容的快照時。我需要在啓動時檢查桌面應用程序的參數=( – user1035344
找出「-XX:MaxPermSize」設置不會告訴您實際使用了多少permgen空間。因此,如果您可以準確預測應用程序應該使用多少permgen空間*,這種方法纔有用。 –