• 区别很直接:
– jstack:看线程
– heap dump:看堆内存里的对象
具体说:
jstack
– 导出的是 JVM 线程栈信息
– 用来排查:
– 死锁
– 线程阻塞
– CPU 飙高
– 哪个线程卡住了
– 看到的是:
– 线程状态 RUNNABLE / BLOCKED / WAITING
– 每个线程当前执行到哪一行方法调用
heap dump
– 导出的是 JVM 堆快照
– 用来排查:
– 内存泄漏
– 大对象是谁
– 哪些对象占内存最多
– 对象为什么没被回收
– 看到的是:
– 对象实例
– 引用链
– 各类对象数量和大小
一句话记:
– jstack 查“谁在执行、谁卡住了”
– heap dump 查“内存被谁占了、为什么没释放”
常见场景:
– 服务卡死、响应慢:先看 jstack
– OOM、内存持续上涨:看 heap dump
补充:
– jstack 文件通常小、获取快
– heap dump 文件通常很大,导出和分析都更重




