jvm性能调优实战 -51修复栈内存区域内存溢出问题 StackOverFlow

本文介绍了如何处理Java中的栈内存溢出问题。不同于堆内存溢出,栈内存溢出不涉及GC,而是由于线程栈中方法调用栈帧过多导致。GC日志和内存快照对栈内存溢出问题帮助不大。通过分析异常报错信息,特别是日志中的StackOverflowError,可以直接定位到问题方法,从而快速解决问题。
摘要由CSDN通过智能技术生成

在这里插入图片描述


Pre

之前的文章,我们分析了Metaspace区域是如何内存溢出的,同时还带着大家分析了一下内存快照。

今天这篇文章,我们就带大家分析一下JVM栈内存溢出的时候,怎么来解决。


栈内存溢出能依托之前的办法解决吗?

首先大家思考一个问题:栈内存溢出能按照之前的方法解决吗?

也就是说,GC日志、内存快照,这些东西对解决栈内存溢出有帮助吗?

首先明确一点,栈内存溢出跟堆内存是没有关系的,因为他的本质是一个线程的栈中压入了过多方法调用的栈桢,比如几千次方法调用的几千个栈桢。

此时就导致线程的栈内存不足,无法放入更多栈桢了。

所以GC日志对你有用吗?

没用!因为GC日志主要是分析堆内存和Metaspace区域的一些GC情况的,就线程的栈内存和栈桢而言,他们不存在所谓的GC。

如果大家还记得之前我们画的图,就应该知道,调用一个方法时在栈里压入栈桢,接着执行完整个方法,栈桢从栈里出来,然后一个线程运行完毕时,他的栈内存就没了。

所以本身这块内存不存在所谓的GC和回收,调用方法就给栈桢分配内存,执行完方法就回收掉那个栈桢的内存。

那么内存快照呢?

内存快照主要是分析一些内存占用的,同样是针对堆内存和Metaspace的,所以对线程的栈内存而言,也不需要借助这个东西。


Code

在这里插入图片描述
使用的JVM参数如下:

-XX:ThreadStackSize=1m

-XX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值