Java虚拟机八 分析Java堆

Posted panzer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java虚拟机八 分析Java堆相关的知识,希望对你有一定的参考价值。

常见的内存溢出的原因及其解决思路

     1.堆溢出:

         由于大量的对象都直接分配在堆上,因此它最有可能发生溢出。因为大量对象占据了堆空间,而这些对象都持有强引用,导致无法回收,当对象大小之和大于堆空间时就会发生溢出。

         为了解决堆溢出错误,一方面可以使用-Xmx参数指定一个更大的堆空间,另一方面,由于堆空间不可能无限增长,通过MAT或者Visual VM等工具,分析找到大量占用堆空间的对象,并在应用程序上作出合理的优化也是十分必要的。

     2.直接内存溢出

         在Java的NIO(New IO)中,直接内存的使用,也就是通过Java代码,获得一块堆外的内存空间,这块空间是直接向操作系统申请的。直接内存的申请速度一般要比堆内存慢,但是其访问速度要快于堆内存。因此对于那些可复用的,并且会被经常访问的空间,使用直接内存可以提高系统性能。但是由于直接内存没有被Java虚拟机完全托管,若使用不当,也会发生内存溢出而宕机。

         

以上是关于Java虚拟机八 分析Java堆的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Java虚拟机——虚拟机堆转储快照分析工具(jhat)

Java虚拟机内存区域堆(heap)的管理

Java虚拟机内存分析

46栈内存溢出内存区域(程序计数器Java 虚拟机栈本地方法栈Java 堆方法区直接内存内存溢出)与内存溢出(对象实例化分析)

20210520 使用jmap分析虚拟机内存状况

20210520 使用jmap分析虚拟机内存状况