黑马JVM总结(三)

(1)栈内存溢出

方法的递归调用,没有设置正确的结束条件,栈会有用完的一天,导致栈内存溢出

可以修改栈的大小:

再次运行:减少了次数

案例二:

两个类的循环应用问题,导致Json解析时会出现

解决:员工不在关联部门了,转换时忽略这个属性转换,打破这个循环引用依赖

(2)线程诊断_CPU占用高

线程更虚拟机栈是息息相关的

后台运行一段java代码:

使用top命令查看一下后天运行:

可以看到有问题的进程编号,top命令只能定位到进程,定位不到那个线程导致的

可以使用ps,命令来查看线程的占用

H:打印进程的进程数,进程里面的线程信息

-eo:规定输入的内容

pid:进程id

tid:线程id

%cpu:对cpu的占用情况

已知进程编号,可以进行筛选 grep

还可以说那个jdk的一个工具进行定位:jstack 进程id

这一它输出的是十六进制的,先要把32655进行转化一下16进制 7F99

他这里详细的打印了哪行代码出现了问题

就可以定位源代码:

(3)线程诊断_迟迟得不到结果-死锁

运行另外一个程序:让他输出一个结果,但是久久没有输出,可能是因为线程死锁导致的怎么排查呢?

最后有显示死锁 Thread0和Thread1,下面有错误的位置

线程1等待线程0释放a对象的锁,线程线程0等待线程1释放b对象的锁,而导致相互等待,死锁

相关推荐
丈剑走天涯12 小时前
JVM(九) JDK8 G1 (Garbage-First)
jvm
笨蛋不要掉眼泪16 小时前
Java虚拟机:堆的参数配置
java·开发语言·jvm
zy happy2 天前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
丈剑走天涯2 天前
JVM(八) JDK8 Parallel GC
jvm
LING-Z3 天前
JVM GC 机制详解:算法、分代、回收器、GC 类型一篇讲透
java·jvm·垃圾回收
大不点wow3 天前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
程序员天天困3 天前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
白露与泡影3 天前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
Ai_easygo3 天前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
小园子的小菜5 天前
深入理解 JVM 垃圾回收:从对象判定、回收算法到经典收集器全解析
jvm·算法