The java.lang.management paket tidak memberikan info lebih banyak daripada Runtime - misalnya itu akan memberikan memori tumpukan ( ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()) terpisah dari memori non-tumpukan ( ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()).
Anda juga bisa mendapatkan proses penggunaan CPU (tanpa menulis kode JNI Anda sendiri), tetapi Anda harus menggunakan java.lang.management.OperatingSystemMXBeana com.sun.management.OperatingSystemMXBean. Ini berfungsi pada Windows dan Linux, saya belum mengujinya di tempat lain.
Misalnya ... panggil metode get getCpuUsage () lebih sering untuk mendapatkan pembacaan yang lebih akurat.
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();
}
}
}
Runtime.getRuntime().freeMemory()seperti yang disarankan dalam jawaban yang diterima TIDAK memberi Anda jumlah memori bebas.