JAVA虚拟机之堆栈异常

本文深入探讨了内存异常问题,包括OutOfMemoryError和StackOverflowError的原因及解决方案。文章列举了常见内存溢出的情况,并分析了其背后的根源,如一次性加载大量数据、循环中频繁创建对象等。同时提供了排查和避免内存问题的有效策略。

平时代码中,特别是没啥规范的代码中总会出现内存溢出、内存泄漏之类的问题,大部分情况下,问问百度谷歌之类的都能解决问题。下面简单总结下堆栈的知识,理清问题探寻思路。

图片如下:

总结

  1. OutOfMemoryError 这类错误基本是内存不够用导致的。具体举例如下 (1)一次性从数据库获取了太多的数据,此时可能导致内存不够用。 (2)循环中产生了大量的对象,对象实例是需要在堆中创建的,于是堆空间不够用了。 (3)对象的引用没有被释放,导致JVM没有回收。 (4)启动参数内存值设定的过小。 (5)多线程中创建的线程过多。【特别是线程调用栈设置比较大时,容易出现这种情况】

  2. StackOutFlowError 这类异常主要原因是线程请求的栈深度大于虚拟机所允许的最大深度。

内存异常的产生部分源于设计上的不完善,比如没有针对数据量做评估,一次性获取大量的数据放入到内存中;编写代码中不好的习惯,在循环中大量的实例化对象;递归中死循环等等。

转载于:https://juejin.im/post/5a38b22df265da431d3cccaf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值