第二章:Java堆内存溢出
Posted use-d
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章:Java堆内存溢出相关的知识,希望对你有一定的参考价值。
- Java堆溢出
可以通过不停的创建对象来造成堆内存溢出
public static void main(String[] args) {
List list = new ArrayList<>();
while(true) {
list.add(new ObjectBIg())
}
}
使用-XX:+HeapDumpOnOutOfMemoryError可以在虚拟机在出现内存溢出异常时Dump出当前的内存堆转存储快照以便后续进行分析。
对Dump快照进行分析,需要区分出到底是内存泄漏Memory Leak还是内存异常Memory Overflow。
如果是内存泄漏,进一步通过工具对GC Root的引用链进行分析。
如果不是内存泄漏,就是内存中的对象确实都还必须存活,那就应该修改虚拟机参数Xmx Xms,同时判断是否可以通过调大物理内存的方式解决。然后从代码角度检测是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期的消耗。
以上是关于第二章:Java堆内存溢出的主要内容,如果未能解决你的问题,请参考以下文章
46栈内存溢出内存区域(程序计数器Java 虚拟机栈本地方法栈Java 堆方法区直接内存内存溢出)与内存溢出(对象实例化分析)