Сбор информации о системе на Java: без JNI, 3 ОС

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для получения базовых сведений о системе на языке Java, таких как имя ОС, версию и тип архитектуры, используйте следующий код:

Java
Скопировать код
String osInfo = String.format("Название ОС: %s, Версия: %s, Архитектура: %s",
    System.getProperty("os.name"),
    System.getProperty("os.version"),
    System.getProperty("os.arch"));
System.out.println(osInfo);

Если вам необходима информация о памяти, воспользуйтесь таким кодом:

Java
Скопировать код
OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
Method m = osBean.getClass().getMethod("getFreePhysicalMemorySize");
System.out.println("Свободная физическая память: " + m.invoke(osBean));

Не забывайте учитывать возможные исключения безопасности при доступе к системным свойствам.

Класс Runtime: Архитектор памяти

С помощью класса Runtime можно получить подробную информацию о памяти и процессорах:

Java
Скопировать код
int cpuCores = Runtime.getRuntime().availableProcessors();
System.out.println("Количество доступных процессоров: " + cpuCores);

Runtime runtime = Runtime.getRuntime();
System.out.println("Свободная память: " + runtime.freeMemory());
System.out.println("Максимальный размер памяти: " + runtime.maxMemory());
System.out.println("Общий размер памяти: " + runtime.totalMemory());

java.io.File: Исследователь дискового пространства

Класс java.io.File помогает исследовать дисковое пространство:

Java
Скопировать код
File[] roots = File.listRoots();
for (File root : roots) {
    System.out.println("Корневой раздел: " + root.getAbsolutePath());
    System.out.println("Общий объем: " + root.getTotalSpace());
    System.out.println("Свободно: " + root.getFreeSpace());
    System.out.println("Доступно: " + root.getUsableSpace());
}

MXBeans: Тайные агенты системы

ManagementFactory и MXBeans предоставят вам данные о памяти:

Java
Скопировать код
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
System.out.println("Использование heap-памяти: " + memoryMXBean.getHeapMemoryUsage());
System.out.println("Использование non-heap памяти: " + memoryMXBean.getNonHeapMemoryUsage());

Чтобы получить скрытые метрики процессов, например нагрузку на CPU, используйте следующее преобразование:

Java
Скопировать код
if (osBean instanceof com.sun.management.OperatingSystemMXBean) {
    com.sun.management.OperatingSystemMXBean sunOsBean =
        (com.sun.management.OperatingSystemMXBean) osBean;
    System.out.println("Нагрузка на ЦПУ: " + sunOsBean.getProcessCpuLoad());
}

Не пропустите возможность обновлять данные о нагрузке на CPU регулярно.

Встречаемся с Лигой Избранных Библиотек

Иногда приходится обращаться к сторонним инструментам:

  • SIGAR API устарел, но когда-то он был надежным выбором для работы с системной метрикой.
  • Проект OSHI: современный и функциональный инструмент на Java:
Java
Скопировать код
SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
CentralProcessor processor = hal.getProcessor();
System.out.println("Идентификатор процессора: " + processor.getProcessorIdentifier());

Предпочтения в пользу Java подталкивают разработчиков выбирать OSHI и библиотеки на основе JNA, избегая при этом JNI.

Викторина: Кроссплатформенная совместимость

  • Будьте уверены, что платформозависимые методы используете с разумом.
  • Предусмотрите резервные планы для функций, специфичных для ОС.
  • Проверьте совместимость библиотеки OSHI на различных платформах.

Ваше поле деятельности: Практические применения

Теперь у вас есть знания для создания:

  • Инструментов системного мониторинга: отслеживание в реальном времени показателей системы.
  • Приложений для тестирования производительности: они помогут измерить скорость вашей системы.

Усовершенствуйте частоту и точность запросов данных в зависимости от потребностей.

Визуализация

УровеньЗащитаJava-метод
1Вход (Тип ОС)System.getProperty("os.name")
2Охранник (Версия ОС)System.getProperty("os.version")
3Офис (Архитектура)System.getProperty("os.arch")
4Контрольная (Статистика)Runtime.getRuntime().availableProcessors()
5Склад (Детали памяти)Runtime.getRuntime().freeMemory()
6Архив (Дисковое пространство)new File("/").getTotalSpace()
7Лаборатория (Продвинутые метрики)((com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean()).getProcessCpuLoad()

Каждый новый ключ открывает вам доступ к следующему уровню информации о вашей системе.

Полезные материалы

  1. Доступ к системным свойствам в Java — основы работы с системными свойствами в Java.
  2. Технология Java Management Extensions (JMX) — руководство по JMX.
  3. OperatingSystemMXBean (Java Platform SE 8) — официальная документация Java SE 8 о метриках ОС.
  4. SystemUtils (Apache Commons Lang 3.11 API) — удобный набор инструментов для работы со системными свойствами от Apache.
  5. GitHub – oshi/oshi: Native Operating System and Hardware Information — библиотека для сбора данных о системах и аппаратном обеспечении.