千家信息网

OOM有什么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了OOM有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、OOM含义:OOM,全称"Out Of Memory
千家信息网最后更新 2026年11月01日OOM有什么用

这篇文章主要介绍了OOM有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、OOM含义:

OOM,全称"Out Of Memory",意思是"内存用完了"。 它来源于java.lang.OutOfMemoryError。

二、为什么会出现java.lang.OutOfMemoryError:即OOM:

官方介绍为当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出 java.lang.OutOfMemoryError :··· (注意:这是个很严重的问题,因为这个问题已经严重到不足以被应用处理)。

具体原因大致为两方面:

1、自身原因:比如虚拟机本身可使用的内存太少。

2、外在原因:如应用使用的太多,且用完没释放,浪费了内存。此时就会造成内存泄露或者内存溢出。

内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。

内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。

三、OOM的error类型

首先说一下JAVA虚拟机运行时会管理的内存区域吧:

1. 程序计数器:当前线程执行的字节码的行号指示器,线程私有
2. JAVA虚拟机栈:Java方法执行的内存模型,每个Java方法的执行对应着一个栈帧的进栈和出栈的操作。
3. 本地方法栈:类似" JAVA虚拟机栈 ",但是为native方法的运行提供内存环境。
4. JAVA堆:对象内存分配的地方,内存垃圾回收的主要区域,所有线程共享。可分为新生代,老生代。
5. 方法区:用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。Hotspot中的"永久代"。
6. 运行时常量池:方法区的一部分,存储常量信息,如各种字面量、符号引用等。
7. 直接内存:并不是JVM运行时数据区的一部分, 可直接访问的内存, 比如NIO会用到这部分。

所以除了程序计数器不会抛出OOM外,其他各个内存区域都可能会抛出OOM。

常见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的形式修改。注意,过多的常量尤其是字符串也会导致方法区溢出。
3. java.lang.StackOverflowError ------> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

四、OOM分析

Heap Dump(堆转储文件)它是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。

通过设置如下的JVM参数,可以在发生OutOfMemoryError后获取到一份HPROF二进制Heap Dump文件:

-XX:+HeapDumpOnOutOfMemoryError

生成的文件会直接写入到工作目录。

注意:该方法需要JDK5以上版本。

转存堆内存信息后,需要对文件进行分析,从而找到OOM的原因。可以使用以下方式:

mat: eclipse memory analyzer, 基于eclipse RCP的内存分析工具。具体使用参考:http://www.eclipse.org/mat/,推荐使用。

jhat:JDK自带的java heap analyze tool,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言OQL,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。不推荐使用。

感谢你能够认真阅读完这篇文章,希望小编分享的"OOM有什么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

内存 方法 大小 对象 文件 信息 情况 分析 原因 可以通过 程序 篇文章 区域 参数 常见 常量 线程 分配 存储 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为想互联网科技怎么样 互联网巨头科技公司 互联网科技的英文 百单互联网科技有限公司 善班互联网科技有限公司 深圳期待互联网科技 互联网金融科技委员会 左右互联网络科技 深圳卡尔迅互联网科技有限公司怎么样 互联网公司会议桌创意科技软装饰 互联网之后的科技是什么 互联网企业和科技型企业 全球顶尖互联网科技公司 青岛科技大学互联网大赛研究生 杭州壁岐互联网科技有限公司 本届互联网博览会上的黑科技 浙南科技城互联网大厦建设工程 互联网风格科技公司名称 科技互联网专业务虚会材料 互联网科技创业有什么好项目 互联网高科技 互联网科技股 哈尔滨新华互联网科技学院 互联网和黑科技的看法 福建科技产业互联网发展 重庆互联网医院沙龙医盟信息科技 洛阳昕诺飞互联网科技有限公司 中国互联网十大科技股排名 互联网科技包装股 云南互联网科技学费
0