阿里面试官:你连什么是OOM?为什么会出现OOM都讲不明白,我还不如去招应届生!

本文详细介绍了Java中常见的内存溢出问题——OOM,包括其概念、产生原因、JVM内存模型的各个区域,以及如何通过Heap Dump分析和解决OOM。此外,还分享了面试中关于JVM、SpringCloud等相关技术的要点。
摘要由CSDN通过智能技术生成

概念

OOM,全称“Out Of Memory”,意思是“内存用完了”

来源于 java.lang.OutOfMemoryError

这是个特别严重的问题,因为这个问题已经 严重到应用程序自己无法处理了。

原因

官方的文档称,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出 java.lang.OutOfMemoryError: ···

具体原因一般有这两个:

自身原因:分配的内存少了,比如JVM虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。
-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m -XX:HeapDumpPath=D:\oomTemp
``-XX:+HeapDumpOnOutOfMemoryError`:表示 导出内存溢出的堆信息(hprof文件)
-Xms:表示 设定程序启动时占用内存大小
-Xmx:表示 程序运行期间最大可占用的内存大小
-XX:HeapDumpPath=:表示 生成得快照路径
外部原因:内存被应用程序使用的太多,而且用完后没有释放,浪费了内存。这种情况下会造成内存泄漏or内存溢出:
内存泄漏:应用进程申请并使用完的内存,没有被释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为当前的申请者不用了,但又不能被JVM虚拟机分配给其他申请者。
内存溢出:申请的内存超出了JVM虚拟机能提供的内存大小。

JVM内存模型

这部分内容来自我的上一篇文章:[JVM|内存模型] Java虚拟机的内存模型?也就这7个而已

Java虚拟机所管理的内存包括以下 7个 运行时数据区域:

程序计数器 (Program Counter Register)

一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器
线程私有的内存
值得注意的是:《Java虚拟机规范》中,唯一一个没有规定任何OutOfMemoryError情况的区域!!!

Java虚拟机栈 (VM Stack)

Java方法执行的线程内存模型
为虚拟机执行Java方法(也就是字节码)服务
线程私有的内存
其生命周期与线程相同
每个Java方法的执行对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值