jstack和jstat有什么区别?

这是Java面试高频必考题 ,我给你用最清晰、最好记、面试直接说的方式讲清楚,不绕弯子。

jstack 和 jstat 核心区别(一句话总结)

jstack 看线程(栈)→ 查CPU高、死锁、代码卡在哪

jstat 看内存(GC)→ 查内存泄漏、GC频繁、堆使用

一个看线程 ,一个看垃圾回收,完全不是一个东西。


详细对比(面试照着说)

1. jstack

作用 :导出当前时刻所有线程的堆栈信息 。

用来解决什么问题:

  • CPU 飙高
  • 死锁
  • 程序卡住、假死
  • 线程阻塞、等待、死循环
    看什么:
  • 每个线程当前执行到哪一行代码
  • 线程状态(RUNNABLE/BLOCKED/WAITING)
  • 锁竞争情况

典型命令

bash 复制代码
jstack <pid>

2. jstat

作用 :实时查看JVM 内存使用 + GC 统计信息 。

用来解决什么问题:

  • 频繁 GC / Full GC
  • 内存占用高
  • 内存泄漏
  • 堆分配不合理
    看什么:
  • YGC 次数、耗时
  • FGC 次数、耗时
  • 伊甸区、survivor、老年代使用率

典型命令

bash 复制代码
jstat -gc <pid> 1000  // 每秒打印一次GC情况

最经典的面试题:CPU 高你用谁?内存高你用谁?

标准答案:

  • CPU 高 → 用 jstack 定位线程和代码行
  • 内存高 / GC 频繁 → 用 jstat 看 GC 情况

极简记忆口诀(超好背)

stack 看栈(线程)→ 找CPU、找死锁、找代码

stat 看状态(GC)→ 找内存、找垃圾回收


总结

  • jstack = 线程快照 → 排查 CPU 高、死锁、代码卡住
  • jstat = GC 统计 → 排查内存占用、频繁 GC
相关推荐
金銀銅鐵2 天前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪
jvm·后端·kotlin
yeccheng4 天前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
On The Road :6 天前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
Yves..6 天前
JVM 学习笔记:内存区域、类加载机制与垃圾回收
jvm
akinggw7 天前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
yh弓长7 天前
JVM 核心机制
jvm
tg_xianheyun8 天前
腾讯云国际账号注册代充值适合哪些海外业务场景?
jvm
yuniko-n8 天前
【JVM】对象内存布局
java·开发语言·jvm
wuminyu8 天前
JVM执行引擎学习总结:热点字节码编译成本地机器码
java·linux·c语言·jvm·c++
wuminyu8 天前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++