Как получить производительность процессора и памяти Windows с помощью java 1.8?

Я хочу получить следующие данные с помощью java 1.8.

  1. Использование процессора.
  2. Общая физическая память
  3. Доступная память
  4. Свободная память

Я использовал OperatingSystemMXBean, но у него нет методов для получения вышеуказанных данных.

Также я использовал Runtime.getRuntime() для получения размера памяти, но он возвращал длинное значение, которое мне не удалось преобразовать в МБ или ГБ.


person Harsh    schedule 16.08.2016    source источник
comment
вы можете использовать OperatingSystemMXBean docs.oracle.com/javase/7/docs/jre/api/management/extension/com/   -  person DimaSan    schedule 16.08.2016
comment
comment
Если ничего не помогает, вы можете изучить Windows API и использовать JNA.   -  person    schedule 16.08.2016
comment
Связано: stackoverflow.com/questions/2062440/java- cpu-usage-monitoring / OperatingSystemMXBean может выдавать неверные результаты или «неподдерживаемые» значения, и посмотрите на источник javasysmon.   -  person Mark Jeronimus    schedule 16.08.2016
comment
Если это вообще возможно, я бы рекомендовал попробовать SIGAR API: stackoverflow.com/questions/47177/   -  person eighthrazz    schedule 16.08.2016


Ответы (1)


Я проверил javadocs и, похоже, они здесь: http://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html

Тем не мение; будьте осторожны с импортированным классом. Вам следует использовать пакет из пакета com.sun.management, а не из пакета java.lang.management пакет.

person bigahega    schedule 16.08.2016
comment
Показанная ссылка отображает методы OperatingSystemMXBe‌, которые доступны до версии java 1.7. В настоящее время я использую Java 1.8, и в ней нет методов, которые могут отображать результат, о котором я упоминал выше. - person Harsh; 16.08.2016
comment
Как вы можете видеть здесь: docs.oracle.com/javase/8/docs/jre/api/management/extension/com/ они по-прежнему включены в 1.8 - person bigahega; 16.08.2016
comment
Спасибо. Я изменил пакет на com.sun.management и получил все необходимые методы. But the getProcessCpuLoad() и getSystemCpuLoad() возвращают -1. Как заставить это работать правильно? - person Harsh; 16.08.2016
comment
Насколько я проверил, внутреннее устройство этих методов как и ожидалось является родным. Поэтому я бы пошел со своим собственным кодом JNI. javaworld. com / article / 2077361 / learn-java / может быть хорошей отправной точкой. - person bigahega; 16.08.2016
comment
Спасибо за эту полезную информацию. Упомянутый фрагмент кода кажется немного сложным, но я обязательно попытаюсь интегрировать этот код JNI. - person Harsh; 22.08.2016