一、Java堆溢出

     堆参数设置-Xms 、-Xmx  均设置成20M

     -XX:+HeapDumpOnOutOfMemoryError :可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行 分析

  堆内存 OutOfMemoryError实例分析

      程序代码如下

     堆内存 OutOfMemoryError实例分析

   抛出异常如下

   堆内存 OutOfMemoryError实例分析

  二、堆转存快照的获取与分析

      2.1  通过ps命令查询进程id; 例如pid = 8052

      2.2  通过如下命令可以获取堆转存快照: jmap -dump:format=b,file=heap.hprof 8052  (heap.hprof 文件名自己定义

       2.3 通过MAT分析heap.hprof文件

   三、 jvm堆溢出异常的分析思路

 1、确认是内存泄露(Memory leak ) 还是内存溢出(Memory overflow)

 2、如果是内存泄露, 可进一步通过工具查看泄露对象到GC Roots的引用链。于是就能找到泄露对象是通过怎样的路径与GC Roots相关联并 导致垃圾收集器无法自动回收它们的。

 3、如果不存在泄露, 换句话说, 就是内存中的对象确实都还必须存活着, 那就应当检查虚拟机的堆参数(-Xmx 与-Xms), 与机器物理内存对比看是否还可以调大, 从代码上检查是否存在某些对象生命周期过长、 持有状态时间过长的情况, 尝试减少程序运行期的内存消耗。



   

  

    

   

       

    

相关文章:

  • 2022-12-23
  • 2021-09-24
  • 2021-12-06
  • 2021-06-23
  • 2021-12-11
  • 2022-03-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2021-11-26
  • 2021-12-02
  • 2021-04-21
  • 2022-12-23
相关资源
相似解决方案