亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)

 更新時(shí)間:2017年04月10日 10:00:12   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一,jvm內(nèi)存區(qū)域

1,程序計(jì)數(shù)器

一塊很小的內(nèi)存空間,作用是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器。

2,java棧

與程序計(jì)數(shù)器一樣,java棧(虛擬機(jī)棧)也是線程私有的,其生命周期與線程相同。通常存放基本數(shù)據(jù)類型,對(duì)象引用(一個(gè)指向?qū)ο笃鹗嫉刂返囊弥羔樆蛞粋€(gè)代表對(duì)象的句柄),reeturnAddress類型(指向一條字節(jié)碼指令的地址)

棧區(qū)域有兩種異常類型:如果線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度,將拋StrackOverflowError異常;如果虛擬機(jī)??梢詣?dòng)態(tài)擴(kuò)展(大部分虛擬機(jī)都可動(dòng)態(tài)擴(kuò)展),當(dāng)擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存時(shí)會(huì)拋出OutOfMemoryError異常。

3,本地方法棧

與虛擬機(jī)棧作用很相似,區(qū)別是虛擬機(jī)棧為虛擬機(jī)執(zhí)行java方法服務(wù),而本地方法棧則是為虛擬機(jī)用到的Native方法服務(wù)。和虛擬機(jī)棧一樣可能拋出StackOverflowError和OutOfMemoryError異常。

4,java堆

java Heap是jvm所管理的內(nèi)存中最大的區(qū)域。JavaHeap是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。主要存放對(duì)象實(shí)例。JavaHeap是垃圾收集器管理的主要區(qū)域,其可細(xì)分為新生代和老年代。如果在堆中沒(méi)有內(nèi)存完成實(shí)例分配,并且也無(wú)法再擴(kuò)展時(shí),會(huì)拋出OutOfMemoryError異常。

5,方法區(qū)

與javaHeap一樣是各個(gè)線程共享的內(nèi)存區(qū)域,用于存放已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、及時(shí)編譯器編譯后的代碼等數(shù)據(jù)。當(dāng)方法區(qū)無(wú)法滿足內(nèi)存分配的需求時(shí),將拋出OutOfMemoryError異常。方法同時(shí)包含常聽(tīng)說(shuō)的運(yùn)行時(shí)常量池,用于存放編譯期生成的各種字面量和符號(hào)引用。

6,直接內(nèi)存

直接內(nèi)存并不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域,是jvm外部的內(nèi)存區(qū)域,這部分區(qū)域也可能導(dǎo)致OutOfMemoryError異常。

二,jvm參數(shù)

-Xss(StackSpace)??臻g

-Xms ,-Xmx(heap memory space)堆空間:Heap是大家最為熟悉的區(qū)域,他是jvm用來(lái)存儲(chǔ)對(duì)象實(shí)例的區(qū)域,Heap在32位的系統(tǒng)中最大為2G,其大小通過(guò)-Xms和-Xmx來(lái)控制,-Xms為jvm啟動(dòng)時(shí)申請(qǐng)的最小Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/64,但小于1G,-Xmx為jvm可申請(qǐng)的最大的Heap內(nèi)存,默認(rèn)為物理內(nèi)存的1/4,一般也小于1G,默認(rèn)當(dāng)空余堆內(nèi)存小于40%時(shí),jvm會(huì)最大Heap的大小到-Xmx指定大小,可通過(guò)-XX:MinHeapFreeRatio來(lái)指定這個(gè)比例,當(dāng)空余堆內(nèi)存大于70%時(shí),JVM會(huì)將Heap的大小往-Xms指定的大小調(diào)整,可通過(guò)-XX:MaxHeapFreeRatio來(lái)指定這個(gè)比例,但通常為了避免頻繁調(diào)整HeapSize的大小,將-Xms和-Xmx的值設(shè)為相同。

-XX:PermSize  -XX:MaxPermSize :方法區(qū)持久代大?。?方法區(qū)域也是全局共享的,在一定的條件下它也會(huì)被   GC ,當(dāng)方法區(qū)域需要使用的內(nèi)存超過(guò)其允許的大小時(shí),會(huì)拋出   OutOfMemory 的錯(cuò)誤信息。

三,常見(jiàn)內(nèi)存溢出錯(cuò)誤解決辦法

除了程序計(jì)數(shù)器外,虛擬機(jī)內(nèi)存的其他幾個(gè)運(yùn)行時(shí)區(qū)域都有發(fā)生OutOfMemoryError(OOM)異常的可能,

1,Java Heap 溢出

一般的異常信息:java.lang.OutOfMemoryError:Java heap spacess

java堆用于存儲(chǔ)對(duì)象實(shí)例,我們只要不斷的創(chuàng)建對(duì)象,并且保證GC Roots到對(duì)象之間有可達(dá)路徑來(lái)避免垃圾回收機(jī)制清除這些對(duì)象,就會(huì)在對(duì)象數(shù)量達(dá)到最大堆容量限制后產(chǎn)生內(nèi)存溢出異常。

出現(xiàn)這種異常,一般手段是先通過(guò)內(nèi)存映像分析工具(如Eclipse Memory Analyzer)對(duì)dump出來(lái)的堆轉(zhuǎn)存快照進(jìn)行分析,重點(diǎn)是確認(rèn)內(nèi)存中的對(duì)象是否是必要的,先分清是因?yàn)閮?nèi)存泄漏(Memory Leak)還是內(nèi)存溢出(Memory Overflow)。

如果是內(nèi)存泄漏,可進(jìn)一步通過(guò)工具(如Jrockit等工具)查看泄漏對(duì)象到GC Roots的引用鏈。于是就能找到泄漏對(duì)象時(shí)通過(guò)怎樣的路徑與GC Roots相關(guān)聯(lián)并導(dǎo)致垃圾收集器無(wú)法自動(dòng)回收。

如果不存在泄漏,那就應(yīng)該檢查虛擬機(jī)的參數(shù)(-Xmx與-Xms)的設(shè)置是否適當(dāng)。

2,虛擬機(jī)棧和本地方法棧溢出

如果線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的最大深度,將拋出StackOverflowError異常。

如果虛擬機(jī)在擴(kuò)展棧時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存空間,則拋出OutOfMemoryError異常

這里需要注意當(dāng)棧的大小越大可分配的線程數(shù)就越少。

3,運(yùn)行時(shí)常量池溢出

異常信息:java.lang.OutOfMemoryError:PermGen space

如果要向運(yùn)行時(shí)常量池中添加內(nèi)容,最簡(jiǎn)單的做法就是使用String.intern()這個(gè)Native方法。該方法的作用是:如果池中已經(jīng)包含一個(gè)等于此String的字符串,則返回代表池中這個(gè)字符串的String對(duì)象;否則,將此String對(duì)象包含的字符串添加到常量池中,并且返回此String對(duì)象的引用。由于常量池分配在方法區(qū)內(nèi),我們可以通過(guò)-XX:PermSize和-XX:MaxPermSize限制方法區(qū)的大小,從而間接限制其中常量池的容量。

4,方法區(qū)溢出

方法區(qū)用于存放Class的相關(guān)信息,如類名、訪問(wèn)修飾符、常量池、字段描述、方法描述等。

異常信息:java.lang.OutOfMemoryError:PermGen space

方法區(qū)溢出也是一種常見(jiàn)的內(nèi)存溢出異常,一個(gè)類如果要被垃圾收集器回收,判定條件是很苛刻的。在經(jīng)常動(dòng)態(tài)生成大量Class的應(yīng)用中,要特別注意這點(diǎn)。

以上這篇Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中比較Long類型是否相等代碼示例

    Java中比較Long類型是否相等代碼示例

    在Java編程中l(wèi)ong是一種數(shù)據(jù)類型,用于表示整數(shù)值,下面這篇文章主要給大家介紹了關(guān)于Java中比較Long類型是否相等的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Java指令重排序在多線程環(huán)境下的處理方法

    Java指令重排序在多線程環(huán)境下的處理方法

    指令重排在單線程環(huán)境下有利于提高程序的執(zhí)行效率,不會(huì)對(duì)程序產(chǎn)生負(fù)面影響,本文對(duì)多線程指令重排問(wèn)題進(jìn)行復(fù)原,并針對(duì)指令重排給出相應(yīng)的解決方案,需要的朋友參考下吧
    2022-04-04
  • 實(shí)例解析Java中的構(gòu)造器初始化

    實(shí)例解析Java中的構(gòu)造器初始化

    這篇文章主要通過(guò)實(shí)例解析Java中的構(gòu)造器初始化,代碼很簡(jiǎn)單,敘述很明確,需要的朋友可以了解下。
    2017-09-09
  • springboot整合quartz實(shí)例demo

    springboot整合quartz實(shí)例demo

    Quartz是一個(gè)開(kāi)源的任務(wù)調(diào)度框架?;诙〞r(shí)、定期的策略來(lái)執(zhí)行任務(wù)是它的核心功能,比如x年x月的每個(gè)星期五上午8點(diǎn)到9點(diǎn),每隔10分鐘執(zhí)行1次,本文重點(diǎn)給大家介紹springboot整合quartz的實(shí)例代碼,感興趣的朋友一起看看吧
    2022-02-02
  • 一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    Java中繼承是通過(guò)extends關(guān)鍵字實(shí)現(xiàn),幫助減少代碼重復(fù),提高復(fù)用性,子類繼承父類的屬性和方法,但私有成員除外,方法重寫(override)使子類改造父類方法以適應(yīng)新功能,這篇文章主要介紹了Java的父子繼承、方法的重寫與super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯的示例代碼

    SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯的示例代碼

    這篇文章主要介紹了SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 使用SpringDataJpa創(chuàng)建中間表

    使用SpringDataJpa創(chuàng)建中間表

    這篇文章主要介紹了使用SpringDataJpa創(chuàng)建中間表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java使用ffmpeg命令來(lái)實(shí)現(xiàn)視頻編碼轉(zhuǎn)換的示例

    java使用ffmpeg命令來(lái)實(shí)現(xiàn)視頻編碼轉(zhuǎn)換的示例

    本文主要介紹了java使用ffmpeg命令來(lái)實(shí)現(xiàn)視頻編碼轉(zhuǎn)換的示例,可以通過(guò)調(diào)用系統(tǒng)命令來(lái)執(zhí)行FFmpeg命令,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java如何導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目

    Java如何導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目

    Jsoup庫(kù)是一款Java的HTML解析器,可用于從網(wǎng)絡(luò)或本地文件中獲取HTML文檔并解析其中的數(shù)據(jù),這篇文章給大家介紹Java導(dǎo)入Jsoup庫(kù)做一個(gè)有趣的爬蟲項(xiàng)目,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Java中增強(qiáng)for循環(huán)在一維數(shù)組和二維數(shù)組中的使用方法

    Java中增強(qiáng)for循環(huán)在一維數(shù)組和二維數(shù)組中的使用方法

    下面小編就為大家?guī)?lái)一篇Java中增強(qiáng)for循環(huán)在一維數(shù)組和二維數(shù)組中的使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10

最新評(píng)論