news 2026/4/15 5:51:21

面试被问:OOM类型有哪些?怎么答?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试被问:OOM类型有哪些?怎么答?

面试官:OOM类型有哪些?

你:就是老年代放不下了嘛!

面试官:等消息吧!

OOM(Out Of Memory)错误有多种类型,每种类型对应不同的内存区域或触发场景。以下是常见的 OOM 类型及其产生原因:


1.java.lang.OutOfMemoryError: Java heap space

  • 触发原因:堆内存(存放对象实例)不足,无法分配新对象。

  • 典型场景

    • 内存泄漏:对象被无意长期引用(如静态集合、未关闭的资源),无法被 GC 回收。

    • 堆大小不足:JVM 堆参数(-Xmx)设置过小,或程序需要处理的数据量超出预期。

    • 大对象分配:一次性申请超大对象(如大数组)。

示例

// 不断向集合中添加对象导致堆溢出 List<Object> list = new ArrayList<>(); while (true) { list.add(new Object()); }

解决方案

  • 检查内存泄漏(使用jmap+MAT分析堆转储)。

  • 调整堆大小(-Xmx-Xms)。

  • 优化代码逻辑,减少对象生命周期。


2.java.lang.OutOfMemoryError: Metaspace(Java 8+)或PermGen space(Java 7-)

  • 触发原因:元空间(Metaspace)或永久代(PermGen)内存不足,用于存储类元数据、方法信息等。

  • 典型场景

    • 动态生成大量类(如使用 CGLib、反射、动态代理)。

    • 类加载器未正确释放(如频繁部署的 Web 应用导致旧类未卸载)。

示例

// 使用 CGLib 动态生成大量代理类 Enhancer enhancer = new Enhancer(); while (true) { enhancer.setSuperclass(OOM.class); enhancer.setCallback((MethodInterceptor) (obj, method, args, proxy) -> proxy.invokeSuper(obj, args))); enhancer.create(); }

解决方案

  • 调整元空间大小(-XX:MaxMetaspaceSize)。

  • 检查类加载器泄漏或动态类生成逻辑。


3.java.lang.OutOfMemoryError: Direct buffer memory

  • 触发原因:直接内存(Direct Memory,通过ByteBuffer.allocateDirect()分配)耗尽。

  • 典型场景

    • 频繁申请直接内存但未及时释放(需依赖System.gc()Cleaner机制)。

    • JVM 直接内存参数(-XX:MaxDirectMemorySize)设置过小。

示例

// 不断申请直接内存 List<ByteBuffer> buffers = new ArrayList<>(); while (true) { buffers.add(ByteBuffer.allocateDirect(1024 * 1024)); // 1MB }

解决方案

  • 检查直接内存使用代码,确保及时释放。

  • 调整-XX:MaxDirectMemorySize


4.java.lang.OutOfMemoryError: Unable to create new native thread

  • 触发原因:操作系统限制线程数量,无法创建新线程。

  • 典型场景

    • 线程数超过系统限制(如 Linux 的ulimit -u)。

    • 每个线程的栈内存(-Xss)设置过大,导致总内存占用超出。

示例

// 无限创建线程 while (true) { new Thread(() -> { try { Thread.sleep(1000000); } catch (InterruptedException e) {} }).start(); }

解决方案

  • 减少线程数(使用线程池)。

  • 调整-Xss减小线程栈大小。

  • 修改系统线程数限制。


5.java.lang.OutOfMemoryError: Requested array size exceeds VM limit

  • 触发原因:尝试分配超过 JVM 限制的数组(通常接近Integer.MAX_VALUE)。

  • 典型场景:错误计算数组长度,如new int[Integer.MAX_VALUE]

解决方案

  • 检查数组长度计算逻辑,使用合理的数据结构。


6.java.lang.OutOfMemoryError: GC Overhead limit exceeded

  • 触发原因:GC 频繁执行但回收效率极低(如 98% 时间用于 GC,仅回收 2% 内存)。

  • 典型场景:堆内存几乎被占满,且存在大量无法回收的对象(内存泄漏)。

解决方案

  • 检查内存泄漏或优化 GC 策略(如调整堆大小、更换垃圾回收器)。


7.java.lang.OutOfMemoryError: CodeCache(JIT 编译代码缓存溢出)

  • 触发原因:JIT 编译器生成的本地代码占满代码缓存区。

  • 典型场景:高频动态编译大量方法(如复杂的热点代码)。

解决方案

  • 调整代码缓存大小(-XX:ReservedCodeCacheSize)。

  • 关闭分层编译(-XX:-TieredCompilation)。


总结

OOM 的根本原因是JVM 内存区域不足资源耗尽,需结合错误类型分析具体内存区域(堆、元空间、直接内存等)。

排查时可通过以下步骤:

1、确定 OOM 类型(通过错误日志)。

2、使用工具分析(如jstatjmapVisualVMMAT)。

3、调整 JVM 参数或优化代码逻辑。

等被裁员在学习?赶紧的吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:51:45

GitHub镜像网站支持GLM-4.6V-Flash-WEB私有仓库镜像

GitHub镜像网站支持GLM-4.6V-Flash-WEB私有仓库镜像 在AI模型日益“重载化”的今天&#xff0c;一个现实问题摆在许多开发者面前&#xff1a;明明看到一款强大的多模态模型发布&#xff0c;却因为下载不动、跑不起来、部署不了而只能望洋兴叹。尤其是在国内网络环境下&#xff…

作者头像 李华
网站建设 2026/4/15 5:47:32

从日志到修复全过程:Dify中Flask-Restx错误处理机制深度解析

第一章&#xff1a;从日志到修复全过程&#xff1a;Dify中Flask-Restx错误处理机制深度解析在Dify平台的API开发中&#xff0c;Flask-Restx作为核心框架承担着接口定义与请求调度职责&#xff0c;其内置的错误处理机制直接影响系统的可观测性与稳定性。当异常发生时&#xff0c…

作者头像 李华
网站建设 2026/4/12 18:50:31

Chromedriver下载地址不稳定?改用GLM-4.6V-Flash-WEB识别动态网页内容

GLM-4.6V-Flash-WEB&#xff1a;用视觉智能替代 Chromedriver 的新范式 在企业自动化流程日益复杂的今天&#xff0c;一个看似不起眼的技术问题——“Chromedriver 下载失败”——却频繁出现在 CI/CD 日志中&#xff0c;成为不少工程师心头之痛。尤其是在国内网络环境下&#x…

作者头像 李华
网站建设 2026/4/14 19:10:02

ComfyUI发布新版支持GLM-4.6V-Flash-WEB拖拽式部署

ComfyUI集成GLM-4.6V-Flash-WEB&#xff1a;拖拽式多模态AI部署新范式 在当前Web应用对实时视觉理解能力需求激增的背景下&#xff0c;开发者面临一个两难困境&#xff1a;一方面希望引入强大的图文理解模型来提升产品智能化水平&#xff1b;另一方面又受限于传统VLM&#xff0…

作者头像 李华
网站建设 2026/4/15 7:18:23

GLM-4.6V-Flash-WEB适用于哪些典型业务场景?一文说清

GLM-4.6V-Flash-WEB 的典型业务场景与落地实践 在今天这个图像信息爆炸的时代&#xff0c;用户早已不再满足于纯文本的交互方式。无论是上传一张截图询问“这个错误怎么解决”&#xff0c;还是拍照提问一道数学题&#xff0c;亦或是在社交平台上发布图文并茂的内容——这些行为…

作者头像 李华
网站建设 2026/4/10 16:34:23

ADB模拟点击结合GLM-4.6V-Flash-WEB实现自动化测试

ADB模拟点击结合GLM-4.6V-Flash-WEB实现自动化测试 在移动应用测试领域&#xff0c;一个老生常谈的问题始终困扰着工程师&#xff1a;当UI界面频繁变更、按钮是图片而非文本、或者控件没有唯一ID时&#xff0c;传统的自动化脚本动辄失效。我们写了一堆基于XPath或ResourceId的定…

作者头像 李华