我是靠谱客的博主 敏感纸鹤,最近开发中收集的这篇文章主要介绍OOM异常,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.什么是OOM?

程序申请内存过大,虚拟机无法满足它们,并且垃圾回收器也没有空间可回收。JVM然后自杀了。

2.为什么会发生OOM?

(1)虚拟机本身可使用的内存太少

(2)应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。 内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。 内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。

3.3种常见的OOM?

(1)java.lang.OutOfMemoryError: Java heap space ------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。

(2)java.lang.OutOfMemoryError: PermGen space ------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。

(出现大量class和过多的常量尤其是字符串,就会引起永久代溢出)

(3)java.lang.StackOverflowError ------> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

最后

以上就是敏感纸鹤为你收集整理的OOM异常的全部内容,希望文章能够帮你解决OOM异常所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部