OOM面试题总结

百度面试题:一个线程 OOM 后,其他线程还能运行吗? 推荐学习 牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖 接招吧!最强“高并发”系统设计 46 连问,分分钟秒杀一众面试者 由于面试官仅提到OOM,但 Java 的OOM又分很多类型的呀: 堆溢出(“java.lang.OutOfMemoryError: Java heap space”) 永久代溢出(“java.lang.OutOfMemoryError:Permgen space”) 不能创建线程(“java.lang.OutOfMemoryError:Unable 阅读详情

1.java的优势是啥?

相比于 C 语言的手动释放内存,Java 的优势在于内存的自动管理,依赖于垃圾回收机制,它能自动识别和清理不再使用的内存资源,消除了手动释放内存的繁琐过程,大大简化了开发人员的工作量。

2. 什么是 OOM?

这个我在线上也碰到过好多次了,Java 的 OOM 通常指的是内存溢出(Out of Memory)异常。在 Java 应用程序中,每个对象都需要在内存中分配一定的空间。当应用程序需要分配更多内存空间来创建对象时,但可分配内存却不足以满足需求时,就会抛出 OOM 异常。

3.什么情况会产生 OOM

比如说经常发生的堆内存溢出, 在创建对象时,绝大多数情况占用的都是 JVM 的堆内存,当堆内存不足以分配时,则会抛出OOM异常。
java.lang.OutOfMemoryError: Java heap space
堆内存溢出的具体场景

常见导致内存溢出的情况有这么几种:

对象生命周期过长:如果某个对象的生命周期过长,而且该对象占用的内存很大,那么在不断创建新对象的过程中,堆内存会被耗尽,从而导致内存溢出。这种情况一般出现在用集合当缓存,却忽略了缓存的淘汰机制。
无限递归:递归调用中缺少退出条件或递归深度过大,会导致空间耗尽,引发溢出错误。往往在测试环境就会发现该问题,不会暴露在生产环境
大数据集合:在处理大量数据时,如果没有正确管理内存,例如加载过大的文件、查询结果集过大等,会导致内存溢出。
JVM配置不当:如果JVM的内存参数配置不合理,例如堆内存设置过小,无法满足应用程序的内存需求,也会导致内存溢出。

4.什么是内存泄漏

对象的引用未被正确释放:如果在使用完一个对象后,忘记将其引用置为 null 或者从数据结构中移除,那么该对象将无法被垃圾回收,导致内存泄漏。比如 ThreadLocal。
长生命周期的对象持有短生命周期对象的引用:如果一个长生命周期的对象持有了一个短生命周期对象的引用,即使短生命周期对象不再使用,由于长生命周期对象的引用仍然存在,短生命周期对象也无法被垃圾回收,从而造成内存泄漏。
过度使用第三方库:某些第三方库可能存在内存泄漏或者资源未正确释放的问题,如果使用不当或者没有适当地管理这些库,可能会导致内存溢出。
集合类使用不当:在使用集合类时,如果没有正确地清理元素,当集合不再需要时,集合中的对象也不会被释放,导致内存泄漏。
资源未正确释放:如果程序使用了诸如文件、数据库连接、网络连接等资源,在不再需要这些资源时没有正确释放,会导致资源泄漏,最终导致内存泄漏。

递归调用导致栈溢出
当递归调用的层级过深,栈空间无法容纳更多的方法调用信息时,会引发 StackOverflowError 异常,这也是一种 OOM 异常。例如,以下示例中的无限递归调用会导致栈溢出。

5.元空间(Metaspace)耗尽

类加载过多:如果应用程序动态加载大量的类或者使用动态生成类的方式,会导致元空间的使用量增加。如果无法及时卸载这些类,元空间可能会耗尽。
字符串常量过多:Java中的字符串常量会被存储在元空间中。如果应用程序中使用了大量的字符串常量,尤其是较长的字符串,可能会导致元空间的耗尽。
频繁使用反射:反射操作需要大量的元数据信息,会占用较多的元空间。如果应用程序频繁使用反射进行类的操作,可能会导致元空间耗尽。
大量动态代理:动态代理是一种使用反射创建代理对象的技术。如果应用程序大量使用动态代理,将会生成大量的代理类,占用较多的元空间。
未正确限制元空间大小:默认情况下,元空间的大小是不受限制的,它会根据需要动态扩展。如果没有正确设置元空间的大小限制,或者限制过小,可能会导致元空间耗尽。

6.当 Java 线程在处理请求时,抛出了 OOM 异常,整个进程还能处理请求吗?

内存溢出的情况,当 GC 的速度跟不上内存的分配时,会发生 OOM, 从而将那个线程 Kill 掉,在这种情况下,进程一般还能继续处理请求。
内存泄漏的情况,由于这些内存不能被回收掉,会发生OOM,从而将那个线程 Kill 掉,防止继续创建不能被回收的对象,此时有些不占用内存的线程可能将继续执行,而那些会占用大量内存的线程可能将无法执行,最坏的情况可能是进程直接挂掉。

面试题十一:异常与性能优化1(anr、oom、Bitmap) 内存抖动:短时间内大量对象被创建,然后又被释放,这种情况如果达到内存的阈值会触发GC内存泄漏:一些不再使用的垃圾对象,由于引用了还在使用的对象,导致不能被回收,这些垃圾对象多了,就会导致oom。以上三者,内存溢出最需要注意、内存泄漏次之,内存抖动最后。3、如何解决oom图片显示:加载合适大小的图片,不要总是请求网络大图,有时可以使用缩略图。及时释放内存图片压缩捕获异常listview:convertview/lru避免在onDraw方法里面执行对象的创建(如果在onDraw方法里面频繁地进行对象的创建,会造 阅读详情

相关推荐

如何处理内存不足(OOM)错误?(面试题200合集,高频、实用)

内存不足(Out-of-Memory, OOM)错误是机器学习,尤其是深度学习开发者经常遇到的棘手问题。当程序尝试分配的内存超出了可用资源(CPU RAM 或 GPU显存 VRAM)的上限时,就会触发此类错误。妥善处理OOM对于成功训练大型模型和处理大规模数据集至关重要。

qq_38334677的博客 1212

Java面试--OOM

② java.lang.OutOfMemoryError: PermGen space ——>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。① java.lang.OutOfMemoryError: Java heap space ——>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。② 应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

m0_74824496的博客 499

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1765

java面试oom问题及答案_java面试-谈谈你对OOM的理解

1、java.lang.StackOverflowError在一个函数中调用自己就会产生这样的错误(栈溢出)发生区域:java虚拟机栈或本地方法栈public class StackOverFlowErrorDemo {public static void main(String[] args) {stackOverFlowError();}public static void stackOver...

weixin_34613462的博客 348

自监督学习与上下文赌博机融合:视觉决策中的协同优化与实战指南

在机器学习领域,自监督学习(Self-Supervised Learning)通过设计前置任务从无标注数据中学习通用表征,已成为解决标注数据稀缺问题的关键技术。其核心原理是利用数据自身的结构生成监督信号,训练编码器提取鲁棒特征。上下文赌博机(Contextual Bandits)作为强化学习的简化分支,专注于在给定上下文信息下做出单步最优决策,平衡探索与利用,广泛应用于推荐系统、广告投放等场景。将两者结合,构建端到端的协同训练框架,能让视觉表征的优化直接服务于最终的决策目标,同时利用自监督任务作为正则化项提

weixin_33721344的博客 520

CS5511芯片实战:如何用DP转LVDS驱动高刷显示器(附配置代码)

本文详细解析了CS5511芯片在DP转LVDS高刷显示器驱动方案中的应用,包括核心架构、寄存器配置、时序优化及典型问题排查。通过实战案例和配置代码,帮助开发者快速实现120Hz高刷新率显示,特别适合医疗影像和工业HMI等严苛场景。

m3n5b7v8c9x的博客 1075

面试必杀题:当发生OOM时,进程还能处理请求吗

面试官:那你知道什么是 OOM 吗?我:这个我在线上也碰到过好多次了,Java 的 OOM 通常指的是内存溢出(Out of Memory)异常。在 Java 应用程序中,每个对象都需要在内存中分配一定的空间。当应用程序需要分配更多内存空间来创建对象时,但可分配内存却不足以满足需求时,就会抛出 OOM 异常。面试官:你知道在我们的程序里,有可能会出现内存泄漏,你对它了解吗?我:对的,和内存溢出的情况不同,还有一种特殊场景,叫做内存泄漏(本质上还是内存溢出,只不过是错误的内存溢出。

IT枫斗者的博客 901

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

发生OOM的EROOR

OOM的类型   JVM内存模型:   按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: 程序计数器:当前线程执行的字节码的行号指示器,线程私有JAVA虚拟机栈:Java方法执行的内存模型,每个Java方法的执行对应着一个栈帧的进栈和出栈的操作。本地方法栈:类似“ JAVA虚拟机栈 ”,但是为native方法的运行提供内存环境。JAVA堆:对象内存分配的地方,内存垃圾

u011649691的博客 307

【云原生之Docker实战】使用docker部署Monica个人开源CRM系统

【云原生之Docker实战】使用docker部署Monica个人开源CRM系统

jks212454的博客 2384

IGCT 测试原理概述

IGCT(Integrated Gate-Commutated Thyristor,集成门极换流晶闸管)是一种高功率半导体器件,基于门极可关断晶闸管(GTO)的原理,但通过集成门极驱动单元和优化结构(如硬驱动技术),实现了更低的导通损耗、更快的开关速度和更高的可靠性。它适用于中高压大功率应用,如高压直流输电(HVDC)、中压变频器和模块化多电平变换器(MMC)。IGCT 的结构为四层 p-n-p-n 器件,门极电流控制导通和关断,阳极电流在关断时快速换流至门极,通常在 1 μs 内完成。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 233

2020最新经历的,Java面试题系列之OOM的原因有哪些

请描述Java中出现OOM的原因,都有哪些,分别怎么解决? 1. Java 堆空间内存溢出 原因: 1 无法在 Java 堆中分配对象 2 吞吐量增加 3 应用程序无意中保存了对象引用,对象无法被 GC 回收 4 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上...

程序员Feri 1268

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7532

jvm面试题---请谈谈你对 OOM 的认识?

JVM面试题——谈谈你对OOM的理解? java中的常见OOM有: 1、java.lang.StackOverflowError 2、java.lang.OutOfMemoryError: Java heap space 3、java.lang.OutOfMemoryError:GC overhead limit exceeded 4、java.lang.OutOfMemoryErro...

笃行 802

RT-DERT安卓部署教程

这个文档中的代码案例,实现了拍照和选图识别,两个功能,可以看效果图。UI做了美化:显示类别机和数量。代码下载地址:通过网盘分享的文件:android_rtdert.zip链接: https://pan.baidu.com/s/1k6e-d_lov1OPgUmit5i_cA?pwd=hpfi 提取码: hpfi–来自百度网盘超级会员v8的分享。

AIOT魔法师 194

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【必会面试题】Redis OOM怎么处理?

处理Out Of Memory (OOM) 错误,尤其是在Redis这样的内存数据库中,需要一系列的诊断和优化步骤。通过以上步骤,可以有效地预防和处理Redis中的OOM问题,保持系统的稳定运行。

weixin_47936134的博客 1029

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 面试题 关于oom的解决方案

#Android关于OOM的解决方案 ##OOM 内存溢出(Out Of Memory)也就是说内存占有量超过了VM所分配的最大 ##出现OOM的原因 加载对象过大相应资源过多,来不及释放 ##如何解决 在内存引用上做些处理,常用的有软引用、强化引用、弱引用在内存中加载图片时直接在内存中作处理,如边界压缩动态回收内存优化Dalvik虚拟机的堆内存分配自定义堆内存大小

嘻哈包袱铺 专栏 1112

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java面试题集锦(16):讲一下对OOM的认识

文章目录前言 前言 OOM抛出的error有(包括但不限于): (下列异常都是java.lang. 开头,比如java.lang.StackOverFlowError) 栈溢出:StackOverFlowError 堆溢出:OutOfMemoryError - OutOfMemoryError:java heap space - OutOfMemoryError:GC overhead limit exceeded - OutOfMemoryError:Direct buffer memory - Out

秋心拆两半。 335

美团面试题:一个线程 OOM 后,其他线程还能运行吗?

比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、不能创建线程(“java.lang.OutOfMemoryError:Unable to create new native thread”)等很多种情况。总结:其实发生OOM的线程一般情况下会死亡,也就是会被终结掉,该线程持有的对象占用的heap都会被gc了,释放内存。先说一下答案,答案是还能运行。

LoveSummer 2万+

17.互联网大厂高频面试题-OOM

文章目录SOFE之stackoverflowErrorOOM之java heap spaceOOM之GC overhead limit exceededOOM之Direct buffer memoeryOOM之unable to create new native thread SOFE之stackoverflowError 首先stackoverflowError是错误,不是异常。 最简单的出...

大李出奇迹的博客 535

Android 面试题 避免OOM(内存优化)三

Android和java中都会出现由于不良代码引起的内存泄露,为了使Android应用程序能够快速高效的运行,Android每个应用程序都会有专门Dalvik虚拟机实例来运行,也就是每个程序都在属于自己的进程中运行。某个应用程序内存泄露仅仅只会使自己进程被kill掉不会影响其他进程(如果是system_process等系统进程出现问题,就会造成系统重启),另一方面,系统为每一个应用程序分配了不同的内存上限,如果超过这个上限被视为内存泄露,从而被kill掉。

我很好 832

Java开发-面试题-0039-JVM 出现 OOM 时是否还能访问操作、新增操作

Java开发-面试题-0039-JVM 出现 OOM 时是否还能访问操作、新增操作

weixin_43873121的博客 1747

每日一道Java 基础面试题 — OOM你遇到过哪些情况,SOF你遇到过哪些情况

OOM: 1,OutOfMemoryError异常 除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的 可能。 Java Heap 溢出: 一般的异常信息:java.lang.OutOfMemoryError:Java heap spacess。 java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来 避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆容量限制后产生内存溢出异常。 出现这种异常,一般手段是先

CSNZのBlog 521
上一篇: Java流式编程入门学习
BingShuBlog
博客等级 码龄8年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BingShuBlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值