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.OperatingSystemMXBean
a 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.