2016-05-16 105 views
0

我正在嘗試使用虛擬機上使用的百分比ram。如何使用JAVA獲得虛擬機的可用內存大小(內存)

在本地我的電腦我實現它通過使用:

Double FreeRamSize = (double) mxBean.getFreePhysicalMemorySize() Double TotalRamSize = (double) mxBean.getTotalPhysicalMemorySize()

而且這工作完全正常。 但是,如果我在虛擬機上部署我的應用程序,則只有總物理內存大小,並且我的FreeRamSize將始終返回0.我沒有在Internet上找到任何提示。

提前感謝您的幫助。

+2

我不知道如果我得到徹底的問題,但通過編程的角度看物理和虛擬機之間沒有區別 –

+0

是什麼讓你覺得你需要改變你如何訪問虛擬機的內存信息?你有沒有嘗試過? –

+0

@FelicePollano也許我沒有正確解釋我的問題。我無法在虛擬機上獲得可用的物理內存大小。它總是會回到0.但是我會得到總的物理內存大小。 (在本地計算機上,我將擁有這兩個值)。 –

回答

0

您不應該修改內存信息代碼來運行虛擬機,因爲虛擬機和物理機RAM之間的根本區別應該完全與Java進程無關。

只是爲了踢我在我自己的虛擬機上運行這個沒有問題。

double GiB = Math.pow(2, 30); 
OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class); 

Double freeRamSize = (double) osBean.getFreePhysicalMemorySize(); 
Double totalRamSize = (double) osBean.getTotalPhysicalMemorySize(); 

System.out.println(freeRamSize/GiB + "/" + totalRamSize/GiB); 

1.8224868774414062/3.9995040893554688

+0

的確,我只是在個人電腦上嘗試了一個虛擬機,它可以工作(包括你的和我的代碼)。 我仍然不知道爲什麼我無法在工作中檢索虛擬機上的freeMemory,但它似乎不是代碼錯誤。感謝您的幫助! –