В частности, я хочу перечислить не все потоки Java JVM, выполняющие мой Java-код, а список потоков операционной системы хост-системы, в которой хост-процесс, запускающий JVM, является лишь одним из потоков ОС. Поэтому мне нужен список потоков ОС, аналогичный тому, который команда Linux top покажет при запуске кода Java.
В лучшем случае есть способ, позволяющий из Java запросить идентификатор потока ОС, который запускает JVM, в которой выполняется код Java для получения списка всех этих потоков ОС. Это потребуется для некоторой балансировки нагрузки, которую я хотел бы реализовать для Java.
РЕДАКТИРОВАТЬ:
Тем временем я нашел Hyperic Sigar, который вызывает написанные библиотеки для Windows и Linux. К сожалению, у меня происходит сбой, и, похоже, его выпуск прекращен.
Находясь в Windows, я загружаю Sigar Windows DLL. У меня работает вызов «System.loadLibrary» (сбой, пока он не заработал):
Код: Выделить всё
static {
System.loadLibrary("sigar-amd64-winnt");
}
Код: Выделить всё
public static void main(String[] args) throws SigarException {
var sigar = new Sigar();
var list = sigar.getCpuList();
for(var cpu : list) {
System.out.println(cpu);
}
}
Кадры Java: (J=скомпилирован Код Java, j=интерпретируемый, Vv=код VM)
j org.hyperic.sigar.Sigar.getCpuListNative()[Lorg/hyperic/sigar/Cpu;+0
j org.hyperic.sigar. Sigar.getCpuList()[Lorg/hyperic/sigar/Cpu;+1
j org.objectscape.Scratch.main([Ljava/lang/String;)V+9
v ~StubRoutines::call_stub
Похоже, что библиотека Windows больше не работает для новых JDK.
Думаю, есть способ для перечисления всех потоков ОС, на которых работает некоторая JVM, которая была добавлена в более новую версию JDK. Просто не могу его вспомнить и могу найти в Интернете...
Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-java-vm
Мобильная версия