平时代码中,特别是没啥规范的代码中总会出现内存溢出、内存泄漏之类的问题,大部分情况下,问问百度谷歌之类的都能解决问题。下面简单总结下堆栈的知识,理清问题探寻思路。
图片如下:
总结
-
OutOfMemoryError
这类错误基本是内存不够用导致的。具体举例如下 (1)一次性从数据库获取了太多的数据,此时可能导致内存不够用。 (2)循环中产生了大量的对象,对象实例是需要在堆中创建的,于是堆空间不够用了。 (3)对象的引用没有被释放,导致JVM没有回收。 (4)启动参数内存值设定的过小。 (5)多线程中创建的线程过多。【特别是线程调用栈设置比较大时,容易出现这种情况】 -
StackOutFlowError
这类异常主要原因是线程请求的栈深度大于虚拟机所允许的最大深度。
内存异常的产生部分源于设计上的不完善,比如没有针对数据量做评估,一次性获取大量的数据放入到内存中;编写代码中不好的习惯,在循环中大量的实例化对象;递归中死循环等等。