Получить информацию о системе на уровне ОС

Пакет java.lang.management дает вам намного больше systems информации, чем Runtime — например, он j2se предоставляет вам память systems в куче (ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()), отдельную от памяти jdk без кучи (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()).

Вы также можете resource получить загрузку процессора java-libraries процессом (без написания system собственного кода JNI), но jre вам нужно преобразовать java.lang.management.OperatingSystemMXBean в j2se com.sun.management.OperatingSystemMXBean. Это работает в Windows core-java и Linux, я не проверял это java-api в другом месте.

Например... чаще java-se вызывайте метод getCpuUsage(), чтобы j2se получать более точные показания.

public class PerformanceMonitor { 
    private int  availableProcessors = getOperatingSystemMXBean().getAvailableProcessors();
    private long lastSystemTime      = 0;
    private long lastProcessCpuTime  = 0;

    public synchronized double getCpuUsage()
    {
        if ( lastSystemTime == 0 )
        {
            baselineCounters();
            return;
        }

        long systemTime     = System.nanoTime();
        long processCpuTime = 0;

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            processCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }

        double cpuUsage = (double) ( processCpuTime - lastProcessCpuTime ) / ( systemTime - lastSystemTime );

        lastSystemTime     = systemTime;
        lastProcessCpuTime = processCpuTime;

        return cpuUsage / availableProcessors;
    }

    private void baselineCounters()
    {
        lastSystemTime = System.nanoTime();

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            lastProcessCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }
    }
}

java

memory

resources

system

2022-11-07T21:25:45+00:00