- Что такое OSHI и какую проблему он решает
- Как OSHI работает без установки нативных библиотек
- JNA vs FFM: что выбрать и когда
- Поддерживаемые платформы и нюансы
- Основные точки входа в API OSHI
- Какие данные можно получить через OSHI
- Практические примеры использования
- Как добавить OSHI в проект
- Миграция с oshi-core на oshi-core-java25
- Ограничения и текущий статус
- Конфигурация и производительность
- Где посмотреть примеры и документацию
- Лицензия и коммерческое использование
- Итоговая таблица: что и как OSHI предоставляет
- Заключение
- Полезные ссылки
Если вы когда-нибудь задумывались, что такое OSHI Core и почему вокруг него столько шума, особенно в контексте Java-разработки и даже Minecraft, то вы попали по адресу! В этом посте мы разберём, что такое OSHI, зачем он нужен, как он помогает Java-разработчикам получать информацию о системе и железе, и как его использовать в своих проектах — будь то Minecraft-мод или что-то более серьёзное.
Что такое OSHI и какую проблему он решает
OSHI (Operating System and Hardware Information) — это библиотека на Java, которая позволяет получить подробную информацию о вашей операционной системе и аппаратном обеспечении. Представьте, что вы — детектив, который хочет узнать всё о компьютере, на котором запускается ваш код: сколько ядер у процессора, сколько памяти свободно, какие диски подключены, какие датчики температуры работают и даже состояние батареи.
И вот тут OSHI — ваш лучший друг! Он решает проблему кроссплатформенного доступа к системной информации без необходимости ставить дополнительные нативные библиотеки. Это значит, что вы можете писать Java-код, который одинаково хорошо работает на Windows, macOS, Linux, Android и даже на UNIX-системах вроде AIX или Solaris.
Как OSHI работает без установки нативных библиотек
Вы, наверное, думаете: "А как же он достаёт всю эту информацию без установки драйверов и прочего?" Всё дело в том, что OSHI использует JNA (Java Native Access) — механизм, который позволяет Java-коду вызывать нативные функции операционной системы напрямую, без сложной настройки.
Но есть и новинка — с выходом JDK 25 появился модуль oshi-core-java25, который использует FFM (Foreign Function & Memory API) — современный способ взаимодействия с нативным кодом, встроенный в Java. Это значит, что OSHI постепенно переходит от JNA к FFM, что улучшает производительность и безопасность.
JNA vs FFM: что выбрать и когда
Критерий | JNA (oshi-core) | FFM (oshi-core-java25) |
---|---|---|
Совместимость | JDK 8 и выше | JDK 25 и выше |
Поддержка платформ | Windows, macOS, Linux, Android, UNIX | Пока ограничена JDK 25 сборками ОС |
Производительность | Хорошая | Лучше, благодаря нативной интеграции |
Стабильность | Проверена временем | В разработке, некоторые функции ещё на JNA |
Простота миграции | Широко используется | Требует замены SystemInfo на SystemInfoFFM |
Если ваш проект работает на JDK 25 и выше, и вы хотите быть на гребне волны, используйте FFM-модуль. Если же нужна стабильность и поддержка старых версий, оставайтесь на классическом JNA.
Поддерживаемые платформы и нюансы
OSHI официально поддерживает:
- Windows
- macOS
- Linux и Android
- UNIX-системы: AIX, FreeBSD, OpenBSD, Solaris
Однако, будьте готовы к нюансам:
- На Android нужно добавить отдельный артефакт JNA (AAR) и исключить стандартный JAR.
- Для Windows сенсорные данные (температура, вентиляторы) требуют дополнительной зависимости —
jLibreHardwareMonitor
. - Некоторые функции на новых платформах могут работать не полностью, пока не реализованы в FFM.
Основные точки входа в API OSHI
Чтобы начать использовать OSHI, создайте объект SystemInfo
(или SystemInfoFFM
для java25):
SystemInfo si = new SystemInfo(); // или new SystemInfoFFM() для java25
HardwareAbstractionLayer hal = si.getHardware();
CentralProcessor cpu = hal.getProcessor();
Через эти объекты вы можете получить:
Объект | Что можно получить |
---|---|
SystemInfo |
Общая информация о системе и железе |
HardwareAbstractionLayer |
Доступ к железу: CPU, память, диски, сенсоры |
CentralProcessor |
Информация о процессоре: ядра, загрузка, время |
Какие данные можно получить через OSHI
OSHI раскрывает богатый набор информации:
Категория | Примеры данных |
---|---|
CPU | Количество ядер, загрузка, частота |
Память | Общий объём, свободная память |
Диски | Модели, размер, чтение/запись |
Сетевые интерфейсы | IP-адреса, скорость передачи |
Сенсоры | Температура, скорость вентиляторов, напряжение |
USB-устройства | Подключённые устройства |
Источники питания | Состояние батареи, заряд, время работы |
Операционная система | Версия, время работы, процессы |
Файловая система | Типы, доступное и общее пространство |
Практические примеры использования
Получение информации о процессоре и памяти
SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
CentralProcessor cpu = hal.getProcessor();
System.out.println("CPU логических ядер: " + cpu.getLogicalProcessorCount());
System.out.println("Средняя загрузка CPU: " + Arrays.toString(cpu.getSystemLoadAverage(3)));
GlobalMemory memory = hal.getMemory();
System.out.println("Общая память: " + memory.getTotal() / 1024 / 1024 + " MB");
System.out.println("Свободная память: " + memory.getAvailable() / 1024 / 1024 + " MB");
Получение информации о дисках и сетевых интерфейсах
List<HWDiskStore> disks = hal.getDiskStores();
for (HWDiskStore disk : disks) {
System.out.println("Диск: " + disk.getModel() + ", размер: " + disk.getSize());
}
List<NetworkIF> networks = hal.getNetworkIFs();
for (NetworkIF net : networks) {
System.out.println("Сеть: " + net.getName() + ", IP: " + Arrays.toString(net.getIPv4addr()));
}
Как добавить OSHI в проект
Для Maven:
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.9.0</version>
</dependency>
Для Gradle:
implementation 'com.github.oshi:oshi-core:6.9.0'
Если вы используете JDK 25 и хотите FFM-модуль:
implementation 'com.github.oshi:oshi-core-java25:6.9.0'
Особые заметки:
- Для Android добавьте JNA AAR и исключите стандартный JNA.
- Для Windows сенсоров — добавьте
jLibreHardwareMonitor
(обратите внимание на лицензию MPL 2.0).
Миграция с oshi-core на oshi-core-java25
- Замените зависимость на
oshi-core-java25
. - Импортируйте
oshi.SystemInfoFFM
вместоoshi.SystemInfo
. - Остальной API остаётся без изменений.
- Учтите, что некоторые функции пока ещё используют старый JNA-бэкенд.
Ограничения и текущий статус
- FFM-модуль пока поддерживает не все платформы и функции.
- Некоторые методы всё ещё делегируют вызовы JNA.
- Активно ведётся разработка и тестирование.
- Сообщество приветствуется для помощи в тестах и коде.
Конфигурация и производительность
- Конфигурация OSHI задаётся через файл
oshi.properties
или системные свойства Java. - Конфигурация не потокобезопасна и применяется при старте.
- Для оптимальной производительности избегайте частых вызовов методов, которые делают системные запросы.
- Подробности по производительности доступны в документации OSHI.
Где посмотреть примеры и документацию
- GitHub OSHI — исходники, FAQ, примеры.
- Javadoc OSHI 6.8.2 — API документация.
- Демонстрации в артефакте
oshi-demo
с GUI и JSON-примерами. - Тесты в проекте, например,
SystemInfoTest.java
.
Лицензия и коммерческое использование
- OSHI распространяется под лицензией MIT — свободно для коммерческого и открытого ПО.
- Есть коммерческая поддержка через Tidelift.
- Для безопасности у OSHI есть канал через Tidelift для сообщений о уязвимостях.
Итоговая таблица: что и как OSHI предоставляет
Категория | Описание | Пример использования |
---|---|---|
CPU | Ядра, загрузка, время работы | Мониторинг нагрузки в Minecraft-сервере |
Память | Общий и свободный объём | Оптимизация использования памяти |
Диски | Модели, размер, чтение/запись | Отслеживание доступного места |
Сетевые интерфейсы | IP, скорость передачи | Логирование сетевой активности |
Сенсоры | Температура, вентиляторы | Контроль температуры железа |
USB-устройства | Подключённые устройства | Проверка наличия нужных устройств |
Операционная система | Версия, процессы | Совместимость и диагностика |
Файловая система | Типы, доступное пространство | Управление файлами и ресурсами |
Заключение
OSHI — это мощный и удобный инструмент для Java-разработчиков, который позволяет получить всю необходимую информацию о системе и железе без головной боли с нативными библиотеками. Хотите сделать Minecraft-мод, который знает, сколько у пользователя памяти или температуру процессора? OSHI — ваш выбор!
Полезные ссылки
Теперь вы вооружены знаниями, чтобы использовать OSHI Core в своих Java-проектах и даже в Minecraft! Не бойтесь экспериментировать и заглядывать в системные недра вместе с OSHI!