Сбор информации о системе на Java: без JNI, 3 ОС
Быстрый ответ
Для получения базовых сведений о системе на языке Java, таких как имя ОС, версию и тип архитектуры, используйте следующий код:
String osInfo = String.format("Название ОС: %s, Версия: %s, Архитектура: %s",
System.getProperty("os.name"),
System.getProperty("os.version"),
System.getProperty("os.arch"));
System.out.println(osInfo);
Если вам необходима информация о памяти, воспользуйтесь таким кодом:
OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
Method m = osBean.getClass().getMethod("getFreePhysicalMemorySize");
System.out.println("Свободная физическая память: " + m.invoke(osBean));
Не забывайте учитывать возможные исключения безопасности при доступе к системным свойствам.
Класс Runtime: Архитектор памяти
С помощью класса Runtime
можно получить подробную информацию о памяти и процессорах:
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
помогает исследовать дисковое пространство:
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 предоставят вам данные о памяти:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
System.out.println("Использование heap-памяти: " + memoryMXBean.getHeapMemoryUsage());
System.out.println("Использование non-heap памяти: " + memoryMXBean.getNonHeapMemoryUsage());
Чтобы получить скрытые метрики процессов, например нагрузку на CPU, используйте следующее преобразование:
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:
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() |
Каждый новый ключ открывает вам доступ к следующему уровню информации о вашей системе.
Полезные материалы
- Доступ к системным свойствам в Java — основы работы с системными свойствами в Java.
- Технология Java Management Extensions (JMX) — руководство по JMX.
- OperatingSystemMXBean (Java Platform SE 8) — официальная документация Java SE 8 о метриках ОС.
- SystemUtils (Apache Commons Lang 3.11 API) — удобный набор инструментов для работы со системными свойствами от Apache.
- GitHub – oshi/oshi: Native Operating System and Hardware Information — библиотека для сбора данных о системах и аппаратном обеспечении.