1. 程式人生 > 其它 >一文了解OOM及解決方案,Java框架體系架構的知識

一文了解OOM及解決方案,Java框架體系架構的知識

一文了解OOM及解決方案,Java框架體系架構的知識

單位對應:GB -> G, g;MB -> M, m;KB -> K, k

  1. 使用?-Xmx?增加堆大小

  2. 修復應用程式中的記憶體洩漏

2. GC 開銷超過限制

發生頻率:5顆星

造成原因

  1. Java 程序98%的時間在進行垃圾回收,恢復了不到2%的堆空間,最後連續5個(編譯時常量)垃圾回收一直如此。

解決方案

  1. 使用?-Xmx?增加堆大小

  2. 使用?-XX:-UseGCOverheadLimit?取消 GC 開銷限制

  3. 修復應用程式中的記憶體洩漏

3. 請求的陣列大小超過虛擬機器限制

發生頻率:2顆星

造成原因

  1. 應用程式試圖分配一個超過堆大小的陣列

解決方案

  1. 使用?-Xmx?增加堆大小

  2. 修復應用程式中分配巨大陣列的 bug

4. Perm gen 空間

發生頻率:3顆星

造成原因

Perm gen 空間包含:

  • 類的名字、欄位、方法

  • 與類相關的物件陣列和型別陣列

  • JIT 編譯器優化

當 Perm gen 空間用盡時,將丟擲異常。

解決方案

  1. 使用?-XX: MaxPermSize?增加 Permgen 大小

  2. 不重啟應用部署應用程式可能會導致此問題。重啟 JVM 解決

5. Metaspace

發生頻率:3顆星

造成原因

  1. 從 Java 8 開始 Perm gen 改成了 Metaspace,在本機記憶體中分配 class 元資料(稱為 metaspace)。如果 metaspace 耗盡,則丟擲異常

解決方案

  1. 通過命令列設定?-XX: MaxMetaSpaceSize?增加 metaspace 大小

  2. 取消?-XX: maxmetsspacedize

  3. 減小 Java 堆大小,為 MetaSpace 提供更多的可用空間

  4. 為伺服器分配更多的記憶體

  5. 可能是應用程式 bug,修復 bug

6. 無法新建本機執行緒

發生頻率:5顆星

造成原因

  1. 記憶體不足,無法建立新執行緒。由於執行緒在本機記憶體中建立,報告這個錯誤表明本機記憶體空間不足

解決方案

總結

阿里傷透我心,瘋狂複習刷題,終於喜提offer 哈哈~好啦,不閒扯了,文章開頭說要免費給大家分享我的複習資料,下面就給大家展示一下——

點選這裡免費獲取我的複習刷題寶典

1、JAVA面試核心知識整理(PDF):包含JVMJAVA集合JAVA多執行緒併發,JAVA基礎,Spring原理微服務,Netty與RPC,網路,日誌,ZookeeperKafkaRabbitMQ,Hbase,MongoDB,Cassandra,設計模式負載均衡資料庫一致性雜湊JAVA演算法資料結構,加密演算法,分散式快取,Hadoop,Spark,Storm,YARN,機器學習,雲端計算共30個章節。

2、Redis學習筆記及學習思維腦圖

3、資料面試必備20題+資料庫效能優化的21個最佳實踐