深入理解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-内存溢出案例演示与分析的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 JVM ------ 调优案例分析与实战

深入理解JVM——Java内存区域与内存溢出异常

深入理解JVM之知识体系

深入理解JVM阅读笔记-内存溢出小结

深入理解java虚拟机系列:java内存区域与内存溢出异常

深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)