0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OOM會(huì)導(dǎo)致JVM虛擬機(jī)退出嗎

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 10:14 ? 次閱讀

熟悉Java開發(fā)的人,應(yīng)該會(huì)經(jīng)常遇到的異常:OOM,那么這個(gè)異常會(huì)導(dǎo)致 JVM 虛擬機(jī)退出嗎?

1、結(jié)論

Java虛擬機(jī)(JVM)在運(yùn)行Java應(yīng)用時(shí),可能會(huì)遇到內(nèi)存不足的情況,從而拋出OutOfMemoryError(OOM)。

這種錯(cuò)誤是Error的一個(gè)子類,通常表示某種無法恢復(fù)的問題。

回到主題,先說下結(jié)論:OutOfMemoryError本身不會(huì)直接導(dǎo)致JVM退出,但由于其代表的嚴(yán)重性和后續(xù)可能遭遇的問題,經(jīng)常會(huì)導(dǎo)致應(yīng)用程序終止。正確地處理和響應(yīng)這種錯(cuò)誤是關(guān)鍵,包括盡可能地分析、解決問題的根源,以及考慮優(yōu)化JVM的配置和應(yīng)用程序的內(nèi)存管理策略。

2、OutOfMemoryError的含義

當(dāng)JVM無法分配足夠的內(nèi)存來滿足Java程序的需求時(shí),就會(huì)拋出OutOfMemoryError。這可能發(fā)生在以下情況:

  • 堆內(nèi)存耗盡 :這是最常見的情況,當(dāng)對(duì)象不斷被創(chuàng)建,但由于某種原因(如內(nèi)存泄漏)沒有被垃圾收集器釋放時(shí),堆內(nèi)存最終將耗盡。
  • 元空間或方法區(qū)內(nèi)存耗盡 :當(dāng)加載大量的類和方法時(shí),可能會(huì)耗盡這部分內(nèi)存。
  • 本地方法棧耗盡 :當(dāng)線程請(qǐng)求的棧大小超過JVM允許的最大值時(shí)。
  • 請(qǐng)求的內(nèi)存超過物理內(nèi)存和虛擬內(nèi)存 :這不僅與JVM設(shè)置有關(guān),還與系統(tǒng)配置有關(guān)。

3、JVM的反應(yīng)

當(dāng)OutOfMemoryError發(fā)生時(shí),JVM不會(huì)立即退出。相反,它將這個(gè)錯(cuò)誤傳遞給正在運(yùn)行的代碼。如果該錯(cuò)誤被捕獲并適當(dāng)處理(盡管捕獲和處理這種錯(cuò)誤通常是不推薦的做法),程序可能會(huì)繼續(xù)運(yùn)行。然而,在實(shí)際情況中,由于內(nèi)存資源已經(jīng)極為緊張,繼續(xù)運(yùn)行可能會(huì)導(dǎo)致進(jìn)一步的錯(cuò)誤或不可預(yù)測(cè)的行為。

4、OOM與JVM的退出

不過盡管OutOfMemoryError本身不會(huì)導(dǎo)致JVM退出,但以下幾種情況可能會(huì):

  • 未捕獲的OOM :如果OutOfMemoryError在應(yīng)用程序中未被捕獲,并傳播到了主線程,那么主線程將終止,從而可能導(dǎo)致整個(gè)應(yīng)用程序的終止。
  • 連續(xù)的OOM :在第一個(gè)OutOfMemoryError之后,如果程序繼續(xù)運(yùn)行并再次嘗試分配內(nèi)存,可能會(huì)連續(xù)觸發(fā)多個(gè)OOM,使得程序無法繼續(xù)執(zhí)行。
  • JVM內(nèi)部錯(cuò)誤 :在某些情況下,如JVM的內(nèi)部進(jìn)程(例如Finalizer線程)遭遇OutOfMemoryError,JVM可能會(huì)決定退出。

5、建議的做法

雖然技術(shù)上可以捕獲和處理OutOfMemoryError,但通常來說,當(dāng)OOM發(fā)生時(shí),最好的做法是記錄詳細(xì)的錯(cuò)誤信息(如堆轉(zhuǎn)儲(chǔ)),然后優(yōu)雅地關(guān)閉應(yīng)用程序。后續(xù)可以分析錯(cuò)誤信息以確定問題的根源,并采取相應(yīng)的措施。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3025

    瀏覽量

    74060
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3268

    瀏覽量

    57715
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    158

    瀏覽量

    12228
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    917

    瀏覽量

    28209
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    容器JVM內(nèi)存配置最佳實(shí)踐

    Killer)機(jī)制,此時(shí)系統(tǒng)會(huì)終止內(nèi)存占用較多的進(jìn)程以保證系統(tǒng)的正常運(yùn)行。特別是在容器環(huán)境下,不合理的JVM堆參數(shù)設(shè)置會(huì)導(dǎo)致各種異?,F(xiàn)象產(chǎn)生,例如應(yīng)用堆大小還未到達(dá)
    發(fā)表于 06-20 09:45 ?892次閱讀
    容器<b class='flag-5'>JVM</b>內(nèi)存配置最佳實(shí)踐

    什么是虛擬機(jī)?虛擬機(jī)真的那么好用嗎?

    在日新月異的科技世界中,虛擬化技術(shù)如同一座橋梁,連接著現(xiàn)實(shí)與數(shù)字的鴻溝,為我們打開了全新的計(jì)算維度。虛擬機(jī),這一概念,自其誕生以來,就以其獨(dú)特的魅力和強(qiáng)大的功能,深深地影響了軟件開發(fā)、系統(tǒng)測(cè)試和云
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機(jī)</b>?<b class='flag-5'>虛擬機(jī)</b>真的那么好用嗎?

    Jvm的整體結(jié)構(gòu)和特點(diǎn)

    中都能夠?qū)崿F(xiàn)。在計(jì)算機(jī)中創(chuàng)建虛擬機(jī)時(shí),需要將實(shí)體機(jī)的部分硬盤和內(nèi)存容量作為虛擬機(jī)的硬盤和內(nèi)存容量。每個(gè)虛擬機(jī)都有獨(dú)立的CMOS、硬盤和操作系統(tǒng),可以像使用實(shí)體
    發(fā)表于 01-05 17:23

    Java虛擬機(jī)介紹

    什么是JVM?Java虛擬機(jī)(Java Virtual Machine, JVM)實(shí)際上是一個(gè)類似于真實(shí)計(jì)算機(jī)系統(tǒng)的抽象機(jī)(Abstract Computing Machine),它擁
    發(fā)表于 04-10 16:15 ?0次下載

    微軟java虛擬機(jī)下載

    微軟java虛擬機(jī)下載:Java虛擬機(jī)JVM)是Java Virtual Machine的縮寫,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能模擬來實(shí)現(xiàn)的。Java
    發(fā)表于 02-26 08:26 ?38次下載

    Java虛擬機(jī)基礎(chǔ)

    JVM基礎(chǔ)----java虛擬機(jī)的學(xué)習(xí)內(nèi)容。
    發(fā)表于 10-30 10:21 ?0次下載

    Java:JVM虛擬機(jī)的入門知識(shí)

    Java開發(fā)現(xiàn)在面試越來越難了,進(jìn)大廠必備的JVM、多線程高并發(fā)這都是最基礎(chǔ)的知識(shí)了,今天我們一起來學(xué)習(xí)Java虛擬機(jī)入門。
    的頭像 發(fā)表于 07-01 11:43 ?2315次閱讀
    Java:<b class='flag-5'>JVM</b><b class='flag-5'>虛擬機(jī)</b>的入門知識(shí)

    虛擬機(jī)文件丟失導(dǎo)致Hyper-V服務(wù)癱瘓的數(shù)據(jù)恢復(fù)案例

    虛擬機(jī)文件丟失導(dǎo)致Hyper-V服務(wù)癱瘓的數(shù)據(jù)恢復(fù)案例
    的頭像 發(fā)表于 02-14 15:11 ?656次閱讀
    <b class='flag-5'>虛擬機(jī)</b>文件丟失<b class='flag-5'>導(dǎo)致</b>Hyper-V服務(wù)癱瘓的數(shù)據(jù)恢復(fù)案例

    詳解Java虛擬機(jī)JVM內(nèi)存布局

    JVM內(nèi)存布局規(guī)定了Java在運(yùn)行過程中內(nèi)存申請(qǐng)、分配、管理的策略,保證了JVM的穩(wěn)定高效運(yùn)行。不同的JVM對(duì)于內(nèi)存的劃分方式和管理機(jī)制存在部分差異。結(jié)合JVM
    的頭像 發(fā)表于 07-13 09:52 ?525次閱讀
    詳解Java<b class='flag-5'>虛擬機(jī)</b>的<b class='flag-5'>JVM</b>內(nèi)存布局

    jvm哪些區(qū)域會(huì)發(fā)生oom

    JVM 是 Java 虛擬機(jī)的縮寫,是Java程序的運(yùn)行平臺(tái)。JVM 內(nèi)存被劃分為不同的區(qū)域,每個(gè)區(qū)域負(fù)責(zé)不同的任務(wù)和存儲(chǔ)不同類型的數(shù)據(jù)。其中,一些區(qū)域容易發(fā)生內(nèi)存溢出錯(cuò)誤(Out
    的頭像 發(fā)表于 12-05 11:51 ?1417次閱讀

    Java怎么排查oom異常

    Java中的OOM(Out of Memory)異常是指當(dāng)Java虛擬機(jī)的堆內(nèi)存不足以容納新的對(duì)象時(shí)拋出的異常。OOM異常是一種常見的運(yùn)行時(shí)異常,經(jīng)常出現(xiàn)在長(zhǎng)時(shí)間運(yùn)行的Java應(yīng)用程序或處理大數(shù)
    的頭像 發(fā)表于 12-05 13:47 ?1255次閱讀

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)? 虛擬機(jī)(Virtual Machine)是運(yùn)行在物理機(jī)(Host Machine)上的虛擬操作系統(tǒng)環(huán)境。在虛擬機(jī)
    的頭像 發(fā)表于 12-27 16:51 ?984次閱讀

    虛擬化數(shù)據(jù)恢復(fù)—EXSI虛擬機(jī)誤還原快照如何恢復(fù)數(shù)據(jù)?

    虛擬化技術(shù)原理是將硬件虛擬化供不同的虛擬機(jī)使用,一臺(tái)物理機(jī)上可以有多臺(tái)虛擬機(jī)。人為誤操作或者物理機(jī)故障會(huì)
    的頭像 發(fā)表于 09-09 11:56 ?378次閱讀
    <b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復(fù)—EXSI<b class='flag-5'>虛擬機(jī)</b>誤還原快照如何恢復(fù)數(shù)據(jù)?

    虛擬化數(shù)據(jù)恢復(fù)—異常斷電導(dǎo)致VMware虛擬機(jī)文件丟失的數(shù)據(jù)恢復(fù)案例

    某品牌服務(wù)器(部署VMware EXSI虛擬機(jī))+同品牌存儲(chǔ)(存放虛擬機(jī)文件)。
    的頭像 發(fā)表于 09-14 17:35 ?487次閱讀
    <b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復(fù)—異常斷電<b class='flag-5'>導(dǎo)致</b>VMware<b class='flag-5'>虛擬機(jī)</b>文件丟失的數(shù)據(jù)恢復(fù)案例

    虛擬機(jī)數(shù)據(jù)恢復(fù)—異常斷電導(dǎo)致XenServer虛擬機(jī)不可用的數(shù)據(jù)恢復(fù)案例

    虛擬機(jī)有兩個(gè)虛擬機(jī)磁盤(系統(tǒng)盤 + 數(shù)據(jù)盤),虛擬機(jī)作為Web服務(wù)器使用。 虛擬機(jī)故障&分析: 機(jī)房異常斷電導(dǎo)致服務(wù)器中一臺(tái)VPS(
    的頭像 發(fā)表于 10-21 14:17 ?204次閱讀
    <b class='flag-5'>虛擬機(jī)</b>數(shù)據(jù)恢復(fù)—異常斷電<b class='flag-5'>導(dǎo)致</b>XenServer<b class='flag-5'>虛擬機(jī)</b>不可用的數(shù)據(jù)恢復(fù)案例