标签:内存溢出 存储 说明 ips href log 进一步 机器 通过
思路: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.从代码上检查是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少的程序运行期的内存消耗。
标签:内存溢出 存储 说明 ips href log 进一步 机器 通过
原文地址:https://www.cnblogs.com/newAndHui/p/11221804.html