美文网首页
内存溢出

内存溢出

作者: 今有所思 | 来源:发表于2017-04-18 10:39 被阅读14次

    Java堆溢出

    Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象,那么对象数量到达最大堆容量限制后就会产生内存溢出异常。

    虚拟机栈和本地方法栈溢出

    关于虚拟机栈和本地方法栈可以出现以下两种异常:

    • 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常
    • 如果虚拟机在扩展时无法申请到足够的内存空间,则抛出OutOfMemoryError异常

    方法区和运行时常量池溢出

    • 运行时常量池溢出,在OutOfMemoryError后面跟随的提示信息是“PermGen space”,说明运行时常量池属于方法区(HotSpot虚拟机中的永久代)的一部分。

    • 方法区的溢出是一种常见的内存溢出异常,一个类要被垃圾收集器回收掉,判断条件是比较苛刻的。在经常动态生成大量Class应用中,需要特别注意类的回收情况。这类除了上面提到的程序使用了CGLib字节码增强和动态语言之外,常见的还有:还有大量jsp或动态产生jsp文件的应用(JSP第一次运行时需要编译为Java类)、基于OSGi的应用(即使是同一个类文件,被不同的加载器加载也会视为不同的类)等。

    本机直接内存溢出

    DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常,如果发现OOM之后文件很小,而程序中有直接或简介使用了NIO,那就可以考虑一下是不是这方面的原因。

    相关文章

      网友评论

          本文标题:内存溢出

          本文链接:https://www.haomeiwen.com/subject/zpdfzttx.html