深入理解JVM-内存溢出案例演示与分析
Posted newandhui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解JVM-内存溢出案例演示与分析相关的知识,希望对你有一定的参考价值。
1.java堆溢出
思路:Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,
那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。
jvm参数:-Xmx 20M, -Xms 20M,避免堆自动扩展。
案列代码:
https://www.cnblogs.com/newAndHui/p/11105956.html 的2.4.案例四:内存快照分析
运行结果:Java heap space
解决方案:
1.先通过内存映像分析工具(如Eclipse Memory Analyzer)对Dump出来的堆转储快照进行分析
2.确认内存中的对象是否是必要的,也就是要先分清除到底是出现了内存泄漏(Memory Leak)还是内存溢出(Memory Overflow)
内存泄漏:
1.如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链。
2.于是就能找到泄露对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收他们的
内存溢出:
说明:如果不存在泄漏,换句话说,就是内存中的对象确实还必须存活着,
1.从代码上检查虚拟机的堆参数(-Xmx与-Xms),与机器物理内存对比看是否还可以调大
2.从代码上检查是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少的程序运行期的内存消耗。
以上是关于深入理解JVM-内存溢出案例演示与分析的主要内容,如果未能解决你的问题,请参考以下文章