如何查看java内存
查看 Java 内存的方法
使用命令行工具
通过 jstat 命令可以监控 JVM 堆内存使用情况:
jstat -gc <pid> <interval> <count>
<pid>:Java 进程 ID,可通过jps或ps -ef | grep java获取。<interval>:监控间隔(毫秒),如1000表示每秒一次。<count>:监控次数,如10表示输出 10 次后停止。
示例输出字段说明:

S0C、S1C:Survivor 区容量(KB)。EC、EU:Eden 区容量及已使用量(KB)。OC、OU:老年代容量及已使用量(KB)。MC、MU:元空间(Metaspace)容量及已使用量(KB)。
使用 JConsole 可视化工具
- 启动
jconsole:jconsole - 选择目标 Java 进程连接。
- 在 内存 选项卡中查看堆、非堆内存的实时使用情况,包括 Eden、Survivor、老年代等区域的图表。
使用 VisualVM
- 下载并启动 VisualVM。
- 连接本地或远程 Java 进程。
- 在 监视器 选项卡中查看堆内存、Metaspace 的实时图表,支持生成内存快照分析。
编程方式获取内存信息
通过 Runtime 类和 MemoryMXBean 获取内存数据:

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
public class MemoryInfo {
public static void main(String[] args) {
// 获取堆内存使用情况
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
System.out.println("Heap Memory: " + heapUsage.getUsed() / 1024 / 1024 + "MB");
// 获取非堆内存(Metaspace)使用情况
MemoryUsage nonHeapUsage = memoryBean.getNonHeapMemoryUsage();
System.out.println("Non-Heap Memory: " + nonHeapUsage.getUsed() / 1024 / 1024 + "MB");
}
}
使用 NMT(Native Memory Tracking)
启用 NMT 监控 JVM 本地内存:
- 启动 JVM 时添加参数:
-XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions - 运行时查看内存摘要:
jcmd <pid> VM.native_memory summary
分析内存转储文件
生成堆转储文件(Heap Dump)后分析:
- 生成转储文件:
jmap -dump:format=b,file=heap.hprof <pid> - 使用工具(如 Eclipse MAT、VisualVM)分析
heap.hprof,查找内存泄漏或大对象。
关键指标解读
- 堆内存:包括 Young Gen(Eden、Survivor)和 Old Gen,对象分配的主要区域。
- 非堆内存:包含 Metaspace(类元数据)、Code Cache(JIT 编译代码)等。
- OOM 预警:监控
OU(老年代使用量)接近OC(容量)时需警惕 Full GC 或内存泄漏。
通过上述方法,可以全面监控 Java 应用的内存使用情况,优化性能并排查问题。






