日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

JVM優化:實戰OutOfMemoryError異常

來源: 責編: 時間:2023-08-05 11:46:16 4565觀看
導讀一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過最大堆容量時,就會產生 OutOfMemoryError 的

一、Java堆溢出

堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過最大堆容量時,就會產生 OutOfMemoryError 的異常。堆 內存異常示例如下:hzN28資訊網——每日最新資訊28at.com

hzN28資訊網——每日最新資訊28at.com

運行后會報異常,在堆棧信息中可以看到hzN28資訊網——每日最新資訊28at.com

java.lang.OutOfMemoryError: Java heap space 的信息,說明在堆內存空間產生內存溢出的異常。hzN28資訊網——每日最新資訊28at.com

新產生的對象最初分配在新生代,新生代滿后會進行一次 Minor GC ,如果 Minor GC 后空間不足會把該對象和 新生代滿足條件的對象放入老年代,老年代空間不足時會進行 Full GC ,之后如果空間還不足以存放新對象則拋 出 OutOfMemoryError 異常。hzN28資訊網——每日最新資訊28at.com

常見原因:hzN28資訊網——每日最新資訊28at.com

  •  內存中加載的數據過多,如一次從數據庫中取出過多數據;
  • 集合對對象引用過多且使用完后沒有清空;
  • 代碼中存在死循環或循環產生過多重復對象;
  • 堆內存分配不合理

二、虛擬機棧和本地方法棧溢出

由于HotSpot虛擬機中并不區分虛擬機棧和本地方法棧, 因此對于HotSpot來說, -Xoss參數(設置本地方法棧大 ?。?雖然存在, 但實際上是沒有任何效果的, 棧容量只能由-Xss參數來設定。 關于虛擬機棧和本地方法棧, 在 《Java虛擬機規范》 中描述了兩種異常:hzN28資訊網——每日最新資訊28at.com

1) 如果線程請求的棧深度大于虛擬機所允許的最大深度, 將拋出StackOverflowError異常。hzN28資訊網——每日最新資訊28at.com

2) 如果虛擬機的棧內存允許動態擴展, 當擴展棧容量無法申請到足夠的內存時, 將拋出 OutOfMemoryError異 常。hzN28資訊網——每日最新資訊28at.com

《Java虛擬機規范》 明確允許Java虛擬機實現自行選擇是否支持棧的動態擴展, 而HotSpot虛擬機的選擇是不支持 擴展, 所以除非在創建線程申請內存時就因無法獲得足夠內存而出現 OutOfMemoryError異常, 否則在線程運行時 是不會因為擴展而導致內存溢出的, 只會因為棧容量無法容納新的棧幀而導致StackOverflowError異常。hzN28資訊網——每日最新資訊28at.com

為了驗證 這點, 我們可以做兩個實驗, 先將實驗范圍限制在單線程中操作, 嘗試下面兩種行為是 否能讓HotSpot虛擬機產 生OutOfMemoryError異常: 使用-Xss參數減少棧內存容量。 結果: 拋出StackOverflowError異常, 異常出現時輸出 的堆棧深度相應縮小。 定義了大量的本地變量, 增大此方法幀中本地變量表的長度。 結果: 拋出 StackOverflowError異常, 異常出現時輸出的堆棧深度相應縮小。hzN28資訊網——每日最新資訊28at.com

三、 運行時常量池和方法區溢出

由于運行時常量池是方法區的一部分, 所以這兩個區域的溢出測試可以放到一起進行。前面曾經提到HotSpot從 JDK 7開始逐步“去永久代”的計劃, 并在JDK 8中完全使用元空間來代替永久代的背景故事, 在此我們就以測試代碼 來觀察一下, 使用“永久代”還是“元空間”來實現方法區, 對程序有什么 實際的影響。hzN28資訊網——每日最新資訊28at.com

String::intern()是一個本地方法, 它的作用是如果字符串常量池中已經包含一個等于此String對象的 字符串, 則返 回代表池中這個字符串的String對象的引用; 否則, 會將此String對象包含的字符串添加到常量池中, 并且返回此 String對象的引用。 在JDK 6或更早之前的HotSpot虛擬機中, 常量池都是分配在永久代中, 我們可以通過-XX: PermSize和-XX: MaxPermSize限制永久代的大小, 即可間接限制其中常量池的容量。hzN28資訊網——每日最新資訊28at.com

方法區內存溢出

方法區的其他部分的內容, 方法區的主要職責是用于存放類型的相關信息, 如類名、 訪問修飾符、 常量池、 字段 描述、 方法描述等。 對于這部分區域的測試, 基本的思路是運行時產生大量的類去填滿方法區, 直到溢出為止。hzN28資訊網——每日最新資訊28at.com

四、直接內存溢出

直接內存(Direct Memory) 的容量大小可通過-XX: MaxDirectMemorySize參數來指定, 如果不去指定, 則默認與 Java堆最大值(由-Xmx指定) 一致, 越過了DirectByteBuer類直接通 過反射獲取Unsafe實例進行內存分配 (Unsafe類的getUnsafe()方法指定只有引導類加載器才會返回實例, 體現了設計者希望只有虛擬機標準類庫里面的 類才能使用Unsafe的功能,在JDK 10時才將Unsafe 的部分功能通過VarHandle開放給外部使用) ,hzN28資訊網——每日最新資訊28at.com

因為雖然使用 DirectByteBuer分配內存也會拋出內存溢出異常, 但它拋出異常時并沒有真正向操作系統申請分配內存, 而是通 過計算得知內存無法分配就會 在代碼里手動拋出溢出異常, 真正申請分配內存的方法是Unsafe::allocateMemory()。hzN28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-151-0.htmlJVM優化:實戰OutOfMemoryError異常

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 一文搞定Java NIO,以及各種奇葩流

下一篇: 為什么你不應該使用Div作為可點擊元素

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數據安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數一數二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯邦通信、信息技術
  • 0糖0卡0脂 旭日森林仙草烏龍茶優惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領取50元優惠券,到手價為29.9元。產品規格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元“人在職場,應該選擇什么樣的著裝?”近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 蘋果公司要求三星和LG Display生產「無邊框」OLED iPhone顯示屏

    據 The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發新的 OLED 顯示面
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top 主站蜘蛛池模板: 顺昌县| 柳林县| 民乐县| 平南县| 福州市| 蒲城县| 察哈| 绥化市| 嫩江县| 扶绥县| 望江县| 社会| 兴业县| 五家渠市| 京山县| 晋州市| 清丰县| 蓝田县| 朔州市| 焉耆| 潞城市| 织金县| 城步| 玉田县| 临江市| 陆丰市| 邵东县| 莱芜市| 和林格尔县| 芦溪县| 慈溪市| 长子县| 玉溪市| 和龙市| 大石桥市| 沙田区| 西昌市| 泗洪县| 油尖旺区| 临安市| 广东省|