Các java.lang.management gói không cung cấp cho bạn thông tin nhiều hơn cả so với Runtime - ví dụ nó sẽ cung cấp cho bạn bộ nhớ heap ( ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
) tách rời khỏi bộ nhớ non-đống (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
).
Bạn cũng có thể nhận được quá trình sử dụng CPU (không cần viết mã JNI của riêng bạn), nhưng bạn cần chuyển java.lang.management.OperatingSystemMXBean
sangcom.sun.management.OperatingSystemMXBean
. Điều này hoạt động trên Windows và Linux, tôi đã không thử nghiệm nó ở nơi khác.
Ví dụ ... gọi phương thức getCpuUsage () thường xuyên hơn để có được kết quả chính xác hơn.
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()
như được đề xuất trong câu trả lời được chấp nhận KHÔNG cho bạn lượng bộ nhớ trống.