2014-10-27 2 views
0

Есть ли способ узнать, сколько виртуальной памяти выделено конкретному процессу? У меня есть программа, и я также добавляю отслеживатель производительности, который будет отслеживать, сколько памяти использует этот процесс и сколько осталось для его использования.Определение того, сколько виртуальной памяти выделено процессу

Для этого мне нужно знать, сколько памяти выделено процессу. Есть ли способ сделать это на Java? Я работаю в Windows 7.

Кроме того, в настоящее время я использую классы Sigar для мониторинга других статистических данных памяти. Есть ли у sigar определенный класс/функция, которая может найти то, что я ищу?

+0

см это SO: http://stackoverflow.com/questions/25552/get-os-level-system-information – spiderman

ответ

1

Вы можете использовать Visualvm.

В коде для вычисления памяти используется: -

Runtime runtime = Runtime.getRuntime(); // Get the Java runtime 
long memory = runtime.totalMemory() - runtime.freeMemory(); // Calculate the used memory 
+0

в идеале да .... –

+0

oops, я удалил комментарий, я спрашивал «добавим ли мы это в конце выполнения метода». tks +1 – spiderman

+0

У меня есть Eclipse Java EE IDE для веб-разработчиков, индиго. Я установил визуальную виртуальную машину, но не могу запустить ее, как указано здесь: http://visualvm.java.net/eclipse-launcher.html. Есть ли у вас какие-либо идеи? – spiderman

0

Чтобы добавить больше на то, что упоминается @Mitesh,

 int var=1; // for bytes. you can change here to print in MB or KB as you wish 
     log.info("************************* PRINTING MEMORY USAGE - BEGIN **************"); 

     Runtime runtime = Runtime.getRuntime(); 

     /* Total number of processors or cores available to the JVM */ 
     log.info("Available processors (cores): " 
       + runtime.availableProcessors()); 

     /* This will return Long.MAX_VALUE if there is no preset limit */ 
     long maxMemory = runtime.maxMemory(); 
     /* Maximum amount of memory the JVM will attempt to use */ 
     log.info("Maximum memory : " 
       + (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory/var)); 

     /* Total memory currently available to the JVM */ 
     long totalMemory = runtime.totalMemory()/var; 
     log.info("Total memory available to JVM : " 
       + totalMemory); 

     /* Total amount of free memory available to the JVM */ 
     long freeMemory = runtime.freeMemory()/var; 
     log.info("Free memory : " + freeMemory); 

     // Calculate the used memory 
     long usedMemory = totalMemory - freeMemory; 
     log.info("Used memory : " + usedMemory); 
Смежные вопросы