package com.breakersoft.plow.monitor; import java.lang.management.*; public class JvmStats { private final static RuntimeMXBean runtimeMXBean; private final static MemoryMXBean memoryMXBean; private final static ThreadMXBean threadMXBean; static { runtimeMXBean = ManagementFactory.getRuntimeMXBean(); memoryMXBean = ManagementFactory.getMemoryMXBean(); threadMXBean = ManagementFactory.getThreadMXBean(); } public Memory mem; public String version; public long uptime; public static JvmStats getJvmStats() { JvmStats stats = new JvmStats(); stats.version = runtimeMXBean.getVmVersion(); stats.uptime = runtimeMXBean.getUptime(); stats.mem = new Memory(); MemoryUsage memUsage = memoryMXBean.getHeapMemoryUsage(); stats.mem.heapUsed = memUsage.getUsed() < 0 ? 0 : memUsage.getUsed(); stats.mem.heapCommitted = memUsage.getCommitted() < 0 ? 0 : memUsage.getCommitted(); memUsage = memoryMXBean.getNonHeapMemoryUsage(); stats.mem.nonHeapUsed = memUsage.getUsed() < 0 ? 0 : memUsage.getUsed(); stats.mem.nonHeapCommitted = memUsage.getCommitted() < 0 ? 0 : memUsage.getCommitted(); return stats; } public static final class Memory { public long heapCommitted; public long heapUsed; public long nonHeapCommitted; public long nonHeapUsed; Memory() { } } }