Le java.lang.gestion de package ne vous donner beaucoup plus d'informations que l'Exécution, par exemple, il vous donnera la mémoire du tas (ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
) distincte de la non-mémoire du tas (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
).
Vous pouvez également obtenir des processus d'utilisation de l'UC (sans écrire votre propre JNI code), mais vous avez besoin de jeter l' java.lang.management.OperatingSystemMXBean
d'un com.sun.management.OperatingSystemMXBean
. Cela fonctionne sur Windows et Linux, je n'ai pas testé ailleurs.
Par exemple, le obtenir getCpuUsage() la méthode la plus fréquemment pour obtenir des lectures plus précises.
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();
}
}
}