2016-09-16 56 views
1

我想圖表Java中的tomcat的門戶網站的Java虛擬機內存使用8輸出Java的實際內存使用率

Java運行時的值是錯誤的,它只是給出了一個半acurate的estimatives,例如:

Runtime.getRuntime().maxMemory(); 

我想我發現在計算器上一個很好的解決方案,但它只是工作的Java 7:

MemoryPoolMXBean testEdenBean = ManagementFactory.getMemoryPoolMXBeans().get(3); 
MemoryPoolMXBean testSurvivorBean = ManagementFactory.getMemoryPoolMXBeans().get(4); 
MemoryPoolMXBean testTemurBean = ManagementFactory.getMemoryPoolMXBeans().get(5); 

max = testEdenBean.getUsage().getMax() 
    + (testSurvivorBean.getUsage().getMax() * 2) 
    + testTemurBean.getUsage().getMax(); 

的Java VisualVM的給了我真正的價值,因爲如果我啓動tomcat -Xmx與1024米我得到最大: 1.073。 741.824 B這是正確的。

我怎樣才能讓我的代碼輸出正確的值?

回答

0

試試這個:

MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); 
    MemoryUsage heapUsage = mbean.getHeapMemoryUsage(); 
    System.out.println("Max heap memory is "+heapUsage.getMax()/1024/1024+" MBytes"); 
    System.out.println("Used heap memory is "+heapUsage.getUsed()/1024/1024+" MBytes"); 

    MemoryUsage nonHeapUsage= mbean.getNonHeapMemoryUsage(); 
    System.out.println("Max non-heap memory is "+nonHeapUsage.getMax()/1024/1024+" MBytes"); 
    System.out.println("Used non-heap memory is "+nonHeapUsage.getUsed()/1024/1024+" MBytes"); 

讓我知道,如果這是你要找的人。