java如何获得内存
获取 Java 程序内存使用情况的方法
使用 Runtime 类获取内存信息Runtime 类提供基础的内存监控方法。通过 Runtime.getRuntime() 获取实例后,可调用以下方法:
totalMemory():返回 JVM 当前分配的堆内存总量(字节)。freeMemory():返回堆内存中未被使用的内存量(字节)。maxMemory():返回 JVM 可申请的最大堆内存量(字节)。
示例代码:

Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
long usedMemory = totalMemory - freeMemory;
System.out.println("Used Memory: " + usedMemory / (1024 * 1024) + " MB");
使用 MemoryMXBean 监控内存
通过 ManagementFactory.getMemoryMXBean() 获取内存管理 Bean,可获取更详细的内存数据,包括堆和非堆内存使用情况:

MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memoryMXBean.getHeapMemoryUsage();
MemoryUsage nonHeapUsage = memoryMXBean.getNonHeapMemoryUsage();
System.out.println("Heap Used: " + heapUsage.getUsed() / (1024 * 1024) + " MB");
System.out.println("Non-Heap Used: " + nonHeapUsage.getUsed() / (1024 * 1024) + " MB");
通过 MemoryPoolMXBean 细分内存池
适用于分析不同内存区域(如 Eden、Old Gen)的使用情况:
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean pool : pools) {
System.out.println(pool.getName() + ": " +
pool.getUsage().getUsed() / (1024 * 1024) + " MB");
}
注意事项
- 所有内存值单位为字节,需手动转换为 KB/MB。
maxMemory()受 JVM 启动参数(如-Xmx)限制。- 垃圾回收会影响
freeMemory()的结果,建议在测量前后调用System.gc()(仅限测试环境)。






