0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OOM会导致JVM虚拟机退出吗

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-30 10:14 次阅读

熟悉Java开发的人,应该会经常遇到的异常:OOM,那么这个异常会导致 JVM 虚拟机退出吗?

1、结论

Java虚拟机(JVM)在运行Java应用时,可能会遇到内存不足的情况,从而抛出OutOfMemoryError(OOM)。

这种错误是Error的一个子类,通常表示某种无法恢复的问题。

回到主题,先说下结论:OutOfMemoryError本身不会直接导致JVM退出,但由于其代表的严重性和后续可能遭遇的问题,经常会导致应用程序终止。正确地处理和响应这种错误是关键,包括尽可能地分析、解决问题的根源,以及考虑优化JVM的配置和应用程序的内存管理策略。

2、OutOfMemoryError的含义

当JVM无法分配足够的内存来满足Java程序的需求时,就会抛出OutOfMemoryError。这可能发生在以下情况:

  • 堆内存耗尽 :这是最常见的情况,当对象不断被创建,但由于某种原因(如内存泄漏)没有被垃圾收集器释放时,堆内存最终将耗尽。
  • 元空间或方法区内存耗尽 :当加载大量的类和方法时,可能会耗尽这部分内存。
  • 本地方法栈耗尽 :当线程请求的栈大小超过JVM允许的最大值时。
  • 请求的内存超过物理内存和虚拟内存 :这不仅与JVM设置有关,还与系统配置有关。

3、JVM的反应

OutOfMemoryError发生时,JVM不会立即退出。相反,它将这个错误传递给正在运行的代码。如果该错误被捕获并适当处理(尽管捕获和处理这种错误通常是不推荐的做法),程序可能会继续运行。然而,在实际情况中,由于内存资源已经极为紧张,继续运行可能会导致进一步的错误或不可预测的行为。

4、OOM与JVM的退出

不过尽管OutOfMemoryError本身不会导致JVM退出,但以下几种情况可能会:

  • 未捕获的OOM :如果OutOfMemoryError在应用程序中未被捕获,并传播到了主线程,那么主线程将终止,从而可能导致整个应用程序的终止。
  • 连续的OOM :在第一个OutOfMemoryError之后,如果程序继续运行并再次尝试分配内存,可能会连续触发多个OOM,使得程序无法继续执行。
  • JVM内部错误 :在某些情况下,如JVM的内部进程(例如Finalizer线程)遭遇OutOfMemoryError,JVM可能会决定退出。

5、建议的做法

虽然技术上可以捕获和处理OutOfMemoryError,但通常来说,当OOM发生时,最好的做法是记录详细的错误信息(如堆转储),然后优雅地关闭应用程序。后续可以分析错误信息以确定问题的根源,并采取相应的措施。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72777
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56405
  • JVM
    JVM
    +关注

    关注

    0

    文章

    152

    浏览量

    12129
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27381
收藏 人收藏

    评论

    相关推荐

    容器JVM内存配置最佳实践

    Killer)机制,此时系统会终止内存占用较多的进程以保证系统的正常运行。特别是在容器环境下,不合理的JVM堆参数设置会导致各种异常现象产生,例如应用堆大小还未到达JVM设置的堆阈值或应用的规格限制,就因为
    发表于 06-20 09:45 637次阅读
    容器<b class='flag-5'>JVM</b>内存配置最佳实践

    VMware虚拟机释放鼠标

    的VMwareTools-8.1.3-203739文件夹,双击vmware-install.pl即可弹出对话框-点击在终端中运行。 点击-回车键-直到运行完成退出为止,然后重启虚拟机(或注销),释放鼠标即可生效。备注:释放鼠标生效后可能工具在linux里面消失了,点击右下
    发表于 10-19 17:33

    虚拟机DNS问题

    我的主机开发板虚拟机本来能互相ping通的。今天我嫌samba服务器刷新慢,按照网上的说明修改虚拟机的/etc/hosts /etc/resolv.conf,拔掉了上网的网线,换成了连接笔记本
    发表于 03-06 18:56

    MYZR虚拟机功能演示

    MYZR虚拟机功能演示目录 1安装并配置开发环境1.1安装并运行虚拟机系统1.1.1准备虚拟机系统和软件1.1.2安装虚拟机1.1.3运行虚拟机
    发表于 12-27 15:04

    为什么虚拟机UBUNTU与win7不能互通?

    按资料“电脑 开发板 虚拟机三者互通教程(推荐).doc”一步步下来,开发板能ping通PC虚拟机的IP,但PC虚拟机不能互ping
    发表于 10-15 00:57

    为什么PC可以ping通虚拟机,但虚拟机ping不通PC?

    我的是笔记本连无线网,开发板通过另一个路由器连接PC,PC IP:192.168.1.100;虚拟机ip:192.168.1.123;板子ip:192.168.1.17遇到的问题:PC可以ping通虚拟机,但虚拟机ping不同P
    发表于 10-25 00:44

    Jvm的整体结构和特点

    中都能够实现。在计算机中创建虚拟机时,需要将实体的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体
    发表于 01-05 17:23

    安装虚拟机

    1、安装虚拟机可以阅读往期文章:Mac苹果电脑安装虚拟机2、在虚拟机上安装CH340驱动,keil4,PZ-ISP,下载CH340驱动安装 下载keil4破解及汉化 下载普中科技烧录软件转载于
    发表于 11-19 08:10

    如何创建虚拟机

    实战开发--开发环境安装(五)1、下载软件vmware和ubuntu-20.04.1-desktop-amd64.iso2、创建虚拟机完整步骤3、安装嵌入式linux所需的工具包4、安装vmware tool,实现虚拟机与物理主机交换和拖拉文件功能,从而文件共享目的5、主
    发表于 12-16 07:45

    Java虚拟机介绍

    什么是JVM?Java虚拟机(Java Virtual Machine, JVM)实际上是一个类似于真实计算机系统的抽象机(Abstract Computing Machine),它拥有一组指令集,用来解释“.class”字节代
    发表于 04-10 16:15 0次下载

    微软java虚拟机下载

    微软java虚拟机下载:Java虚拟机JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java
    发表于 02-26 08:26 38次下载

    Java虚拟机基础

    JVM基础----java虚拟机的学习内容。
    发表于 10-30 10:21 0次下载

    Java:JVM虚拟机的入门知识

    Java开发现在面试越来越难了,进大厂必备的JVM、多线程高并发这都是最基础的知识了,今天我们一起来学习Java虚拟机入门。
    的头像 发表于 07-01 11:43 2073次阅读
    Java:<b class='flag-5'>JVM</b><b class='flag-5'>虚拟机</b>的入门知识

    详解Java虚拟机JVM内存布局

    JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的稳定高效运行。不同的JVM对于内存的划分方式和管理机制存在部分差异。结合JVM
    的头像 发表于 07-13 09:52 319次阅读
    详解Java<b class='flag-5'>虚拟机</b>的<b class='flag-5'>JVM</b>内存布局

    jvm哪些区域会发生oom

    JVM 是 Java 虚拟机的缩写,是Java程序的运行平台。JVM 内存被划分为不同的区域,每个区域负责不同的任务和存储不同类型的数据。其中,一些区域容易发生内存溢出错误(Out
    的头像 发表于 12-05 11:51 627次阅读