2012-11-14 25 views
1

可能重複:
Read Java JVM startup parameters (eg -Xmx)如何在運行時讀取XX:MaxPermSize?

我們有一個桌面應用程序,其中一些老設備不具備相應的內存設置。

他們在「隨機」時間中經歷了燙髮gen空間,我需要警告運行過低MaxPermSize的用戶,但我無法弄清楚如何從jvm訪問此設置。

+1

找出「-XX:MaxPermSize」設置不會告訴您實際使用了多少permgen空間。因此,如果您可以準確預測應用程序應該使用多少permgen空間*,這種方法纔有用。 –

回答

4

這應該給你如何做到這一點

一個粗略的想法
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); 
    } 
} 
-1

這會給出相應的屬性值。

System.getProperty("XX:MaxPermSize"); 

檢查這個網址How can I view the MaxPermSize in JVM?

+1

這不起作用,據我所知,沒有可用的系統屬性。我打印了所有系統屬性http://pastie.org/5376306,以-XX:MaxPermSize = 192m作爲參數啓動java -jar「C:\ Java \ hack \ MemoryTest \ dist \ MemoryTest.jar」-XX:MaxPermSize = 192m – user1035344

+0

您提供的網址與您無法使用的溶劑無關。 – kel

1

首先,我建議你連接JConsoleVisualVM。有沒有辦法爲您確定您的應用程序(程序)PermGen的大小。另一種方法是使用MemoryMXBean,但它可以做簡單的內存報告,但堅持使用我提到的工具來獲取更詳細的圖片。
所以,如果你要爲MemoryMXBean那就試試這個代碼

MemoryMXBean memMXBean = ManagementFactory.getMemoryMXBean(); 
memMXBean.getHeapMemoryUsage().getUsed(); 
memMXBean.getNonHeapMemoryUsage().getUsed(); 

它告訴你快照數據不是commulated值:)

+0

這不會讓我真正讓我得到MaxPermSpace,只是當您說出現在使用的內容的快照時。我需要在啓動時檢查桌面應用程序的參數=( – user1035344

相關問題