最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JVM內(nèi)存溢出原因和解決思路

 更新時間:2021年12月27日 15:00:33   作者:JV  
本文主要介紹了淺談JVM內(nèi)存溢出原因和解決思路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

棧溢出(虛擬機棧和本地方法棧)

產(chǎn)生原因

  • 在HotSpot中,只能由-Xss參數(shù)來設(shè)定。因為在HotSpot中不區(qū)分虛擬機棧和本地方法棧的。
  • 棧溢出時會出現(xiàn)兩種異常:StackOverflowError異常和OutOfMemoryError異常。
    • StackOverflowError異常因為線程請求的棧深度大于虛擬機允許的最大深度。
    • OutOfMemoryError異常發(fā)生在虛擬機棧內(nèi)存允許動態(tài)擴展的情況下,當擴展棧容量無法申請到足夠的內(nèi)存時。
  • 因為HotSpot是不支持擴展的,所在除非在線程創(chuàng)建時申請內(nèi)存無法滿足時,才會出現(xiàn)OutOfMemoryError,其余都是產(chǎn)生StackOverflowError異常。
  • 結(jié)論:給每個線程的棧分配內(nèi)存不是越大越好??梢赃@么理解,比如總的內(nèi)存是2G,如果一個線程就占了1.5G,那就。。。。

解決思路

出現(xiàn) StackOverflowError異常時,會有明確錯誤堆??晒┓治?,相對而言比較容易定位到問題所在。

如果使用Hotspot虛擬機默認參數(shù),棧深度在大多數(shù)情況下(因為每個方法壓人棧的幀大小并不是一樣的,所以只能說大多數(shù)情況下)到達1000~2000 是完全沒有問題,對于正常的方法調(diào)用(包括不能做尾遞歸優(yōu)化的遞歸調(diào)用),這個深度應(yīng)該完全夠用了。但是,如果是建立過多線程導(dǎo)致的內(nèi)存濫出,在不能減少線程數(shù)量或者更換 64 位虛擬機的情況下,就只能通過減少最大堆和減少棧容量來換取更多的線程。

堆溢出

產(chǎn)生原因

當不斷的創(chuàng)建對象并避免垃圾回收時,總?cè)萘坑|及最大堆容量時,就會產(chǎn)生溢出。
運行代碼:設(shè)置vm參數(shù)-Xms10m -Xmx10m

public class HeapTest {
    static class OOMObj{

    }
    /**
     * vm arg -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError
     */

    public static void main(String[] args) {
        List<OOMObj> oomObjList = new ArrayList<OOMObj>();
        while (true){
            oomObjList.add(new OOMObj());
        }
    }
}

結(jié)果:

解決思路

首先通過內(nèi)存映像分析工具確認是內(nèi)存泄漏還是內(nèi)存溢出。

  1. 如果是內(nèi)存泄漏,說明導(dǎo)致OOM的對象不是必要的。進一步通過工具查看GC Roots引用鏈。一般可以比較精確的定位。
  2. 如果是內(nèi)存溢出,對象是必須存活的,那就檢查虛擬機的堆參數(shù)-Xms、-Xmx設(shè)置,對比機器內(nèi)存,看是否還有上調(diào)的空間。再從代碼上檢查對象生命周期、持有狀態(tài)時間、存儲結(jié)構(gòu)是否有設(shè)計不合理等情況。

方法區(qū)和運行時常量池溢出

產(chǎn)生原因

一個類要被垃圾收集器回收,條件是比較苛刻的。在經(jīng)常運行時生成大量動態(tài)類的應(yīng)用場景里,就應(yīng)該特別關(guān)注了。

解決思路

HotSpot在JDK8中已經(jīng)完全使用元空間代替永久帶。Hotspot提供了一些參數(shù)作為元空間的防御措施,主要包括:

  1. XX:MaxMetaspacesize:設(shè)置元空間最大值,默認是-1,即不限制,或者說只受限于本地內(nèi)存大小。
  2. -XX:Metaspacesize :指定元空間的初始空間大小,以宇節(jié)為單位,達到該值就會觸發(fā)垃圾收集進行類型卸載,同時收集器會對該值進行調(diào)整:如果釋放了大量的空間,就適當降低該值;如果釋放了很少的空間,那么在不超過-XX:MaxMetaspaceSize(如果設(shè)置了的話)的情況下,適當提高該值。
  3. -XX:MinMetaspace Free Ratio:作用是在垃圾收集之后控制最小的元空間剩余容量的百分比,可減少因為元空間不足導(dǎo)致的垃圾收集的頻率。類似的還有-xx:Max-MetaspaceFreeRatio,用于控制最大的元空間剩余容量的百分比。

本機直接內(nèi)存溢出

產(chǎn)生原因

在直接或間接使用了ByteBuffer中的allocateDirect方法的時候,而不做clear的時候就會出現(xiàn)類似的問題。明顯的特征是在Heap Dump文件中不會看到明顯的異常情況。

解決思路

設(shè)置參數(shù): -XX:MaxDirectMemorySize

到此這篇關(guān)于淺談JVM內(nèi)存溢出原因和解決思路的文章就介紹到這了,更多相關(guān)JVM內(nèi)存溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot多數(shù)據(jù)源配置方式以及報錯問題的解決

    SpringBoot多數(shù)據(jù)源配置方式以及報錯問題的解決

    這篇文章主要介紹了SpringBoot多數(shù)據(jù)源配置方式以及報錯問題的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 基于Java字符串 "==" 與 "equals" 的深入理解

    基于Java字符串 "==" 與 "equals" 的深入理解

    本篇文章是對Java中的字符串"=="與"equals"進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    這篇文章主要介紹了SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot通過Redis實現(xiàn)防止重復(fù)提交

    Spring Boot通過Redis實現(xiàn)防止重復(fù)提交

    表單提交是一個非常常見的功能,如果不加控制,容易因為用戶的誤操作或網(wǎng)絡(luò)延遲導(dǎo)致同一請求被發(fā)送多次,本文主要介紹了Spring Boot通過Redis實現(xiàn)防止重復(fù)提交,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • springboot+idea熱部署的實現(xiàn)方法(自動刷新)

    springboot+idea熱部署的實現(xiàn)方法(自動刷新)

    這篇文章主要介紹了springboot+idea熱部署的實現(xiàn)方法(自動刷新),本文分步驟通過實例代碼截圖相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 動力節(jié)點_王勇_DRP項目視頻教程完整版292集

    動力節(jié)點_王勇_DRP項目視頻教程完整版292集

    該視頻由國內(nèi)知名講師王勇老師主講,適合掌握Java基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計292集,學(xué)習(xí)Java Web項目,DRP項目視頻是首選,累計下載量已經(jīng)達到上千萬,很多同學(xué)通過自學(xué)該視頻找到了軟件開發(fā)工作
    2017-04-04
  • 完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題

    完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題

    這篇文章主要介紹了完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Springboot @Validated和@Valid的區(qū)別及使用詳解

    Springboot @Validated和@Valid的區(qū)別及使用詳解

    這篇文章主要介紹了Springboot @Validated和@Valid的區(qū)別及使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 詳解Spring Cloud Gateway修改請求和響應(yīng)body的內(nèi)容

    詳解Spring Cloud Gateway修改請求和響應(yīng)body的內(nèi)容

    這篇文章主要介紹了Spring Cloud Gateway修改請求和響應(yīng)body的內(nèi)容的相關(guān)資料,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • JSqlParse完整介紹

    JSqlParse完整介紹

    JSqlParse是一款很精簡的sql解析工具,本文主要介紹了JSqlParse完整介紹,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評論

宿迁市| 乐亭县| 革吉县| 攀枝花市| 南充市| 五台县| 保康县| 申扎县| 游戏| 木兰县| 钟祥市| 社旗县| 孟津县| 宜城市| 沁水县| 静乐县| 墨竹工卡县| 阜城县| 伊宁市| 卓资县| 张北县| 耿马| 翁源县| 定南县| 拜泉县| 兴业县| 全州县| 平陆县| 班玛县| 鹿邑县| 西乌珠穆沁旗| 得荣县| 鹤岗市| 洪江市| 潜山县| 克拉玛依市| 喀喇沁旗| 民权县| 兴义市| 安图县| 三穗县|