2016-05-10 11 views
2

Я хочу рассчитать использованную память кучи JVM. В примере приложения я сделал следующее.Расчет используемой памяти JVM

  1. Размер кучи JVM как Xms = 200mb и Xmx = 200mb.

  2. Проведенные вычисления, используя Java Runtime API. Это дало мне следующий результат для выборочной программы.

    Продолжительность Общий объем памяти: 192413696

    Продолжительность макс память: 192413696

    время выполнения свободной памяти: 39734096

    время выполнения доступной памяти = (макс - всего + свободный) = 39734096

    Процент используемая память = 100 * (max-available)/max = 100 * (192413696- 39734096)/192413696 = 79,35%

  3. ли другой расчет через JMX: java.lang: тип = Память (Использование MBean)

    It gave me following output for the same program. 
    
    Used memory : 127737896 
    
    Max memory : 201850880 
    
    Percentage of used memory = 100*(used/max) = 100* (127737896/201850880)= 
    63.28% 
    

Не могли бы вы помочь мне с следующий?

  1. В чем причина различия между использованием API JMX и Java Run time API?

  2. Если я хочу знать память, занятую в моей куче JVM, которая является правильным подходом (точка 2 или точка 3). Мое намерение состоит в том, чтобы поднять оповещения, прежде чем из-за нехватки памяти для моей JVM.

У меня есть еще одно наблюдение. Когда я использую алгоритм CMS (с -Xms и -Xms, установленным на 32 ГБ, а доля занятости - до 70%), я мог видеть разницу между свободной памятью, вычисленной с использованием MBeans и java runtime freeMemory(). Когда я использовал G1, я не мог найти эту разницу (Mbeans и API времени выполнения дали такое же значение).

+0

Вы можете найти [этот вопрос] (http://stackoverflow.com/q/790535/2032064) и [MemoryMXBean документация ] (https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html) интересно. – Mifeet

+0

Спасибо за информацию. Я буду проверять детали. –

ответ

-1

Расчет должен быть usedMemory/MaxMemory * 100

Used Memory = 127737896 
Max Memory = 201850880 

127737896/201850880 * 100 = 63.28% 
0
Runtime rt = Runtime.getRuntime(); 
long mem = rt.totalMemory(); 
long fm = rt.freeMemory(); 
long mm = rt.maxMemory(); 
long used = mm - fm; 
Смежные вопросы