java如何过去内存
Java 获取内存信息的方法
在 Java 中可以通过多种方式获取内存信息,包括堆内存、非堆内存以及操作系统的总内存等。以下是几种常见的方法:
使用 Runtime 类获取内存信息
Runtime 类提供了一些方法用于获取 JVM 的内存使用情况:

Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory(); // 当前 JVM 分配的总内存(字节)
long freeMemory = runtime.freeMemory(); // 当前 JVM 空闲内存(字节)
long usedMemory = totalMemory - freeMemory; // 已使用内存
long maxMemory = runtime.maxMemory(); // JVM 可申请的最大内存(字节)
System.out.println("Total Memory: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("Free Memory: " + freeMemory / (1024 * 1024) + " MB");
System.out.println("Used Memory: " + usedMemory / (1024 * 1024) + " MB");
System.out.println("Max Memory: " + maxMemory / (1024 * 1024) + " MB");
使用 ManagementFactory 获取详细内存信息
ManagementFactory 提供了更详细的内存监控接口,可以获取堆内存和非堆内存的使用情况:
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();
System.out.println("Heap Memory Usage:");
System.out.println(" Init: " + heapMemoryUsage.getInit() / (1024 * 1024) + " MB");
System.out.println(" Used: " + heapMemoryUsage.getUsed() / (1024 * 1024) + " MB");
System.out.println(" Committed: " + heapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");
System.out.println(" Max: " + heapMemoryUsage.getMax() / (1024 * 1024) + " MB");
System.out.println("Non-Heap Memory Usage:");
System.out.println(" Init: " + nonHeapMemoryUsage.getInit() / (1024 * 1024) + " MB");
System.out.println(" Used: " + nonHeapMemoryUsage.getUsed() / (1024 * 1024) + " MB");
System.out.println(" Committed: " + nonHeapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");
System.out.println(" Max: " + nonHeapMemoryUsage.getMax() / (1024 * 1024) + " MB");
获取操作系统的总内存和可用内存
如果需要获取操作系统的总内存和可用内存(非 JVM 内存),可以通过 com.sun.management.OperatingSystemMXBean 实现:

import com.sun.management.OperatingSystemMXBean;
import java.lang.management.ManagementFactory;
OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
long totalPhysicalMemory = osBean.getTotalPhysicalMemorySize(); // 系统总物理内存
long freePhysicalMemory = osBean.getFreePhysicalMemorySize(); // 系统空闲物理内存
System.out.println("Total Physical Memory: " + totalPhysicalMemory / (1024 * 1024) + " MB");
System.out.println("Free Physical Memory: " + freePhysicalMemory / (1024 * 1024) + " MB");
使用第三方库获取内存信息
如果需要更详细的内存分析,可以使用第三方库如 oshi 获取系统级内存信息:
<!-- Maven 依赖 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.1.6</version>
</dependency>
示例代码:
import oshi.SystemInfo;
import oshi.hardware.GlobalMemory;
SystemInfo systemInfo = new SystemInfo();
GlobalMemory memory = systemInfo.getHardware().getMemory();
long totalMemory = memory.getTotal(); // 系统总内存
long availableMemory = memory.getAvailable(); // 系统可用内存
System.out.println("Total System Memory: " + totalMemory / (1024 * 1024) + " MB");
System.out.println("Available System Memory: " + availableMemory / (1024 * 1024) + " MB");
注意事项
Runtime和ManagementFactory提供的是 JVM 内存信息,而oshi或OperatingSystemMXBean提供的是操作系统级别的内存信息。maxMemory取决于 JVM 启动参数(如-Xmx),如果没有设置,默认为系统可用内存的一部分。- 内存单位通常是字节,需要手动转换为 KB、MB 或 GB 以便阅读。






