中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM的內存模型和垃圾回收機制

發布時間:2021-09-17 15:56:16 來源:億速云 閱讀:97 作者:chen 欄目:大數據

本篇內容介紹了“JVM的內存模型和垃圾回收機制”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

JVM的內存模型和垃圾回收機制

jvm的內存模型和heap的分代模型如上圖所示

名稱是否線程共享存放內容
虛擬機棧局部變量表、方法出口等
本地方法棧native方法
程序計數器當前線程支持的字節碼命令
方法區jvm加載的類信息、常量、靜態變量等
創建的java對象

分代原因:提升GC性能和方便內存分配

1. 內存分配

  • 新生代與老年代的比值大概是1:3

  • eden區和surviver區的比值默認8:1

2. 內存回收

        幾乎所有的java對象都是在eden區出生的,當eden區沒有足夠的空間時虛擬機會發起一次minorGC,此后存活下的對象會被放到seurvier區,如果surviver區的空間不夠,則根據內存擔保原則分配到老年代。

  • 垃圾確認原則:應用技術法與可達性分析法

  1. 引用計數法:即一個對象如果沒有任何與之關聯的引用,即他們的引用計數都不為0,則說明對象不太可能再被用到,那么這個對象就是可回收對象(可是會有循環引用的問題)。

  2. 可達性分析法:解決引用計數法的循環引用問題,如果在“GC roots”和一個對象之間沒有可達路徑,則稱該對象是不可達的。要注意的是,不可達對象不等價于可回收對象,不可達對象變為可回收對象至少要經過兩次標記過程。兩次標記后仍然是可回收對象,則將面臨回收。

  • miborGC(復制-》清空-》互換)流程:eden、servicorFrom 中存活對象復制到ServicorTo,年齡+1,15代之后進入老年代,大對象直接進入老年代;-》清空eden、servicorFrom;-》 ServicorTo和ServicorFrom互換。

  • 垃圾回收內存擔保原則:老年代中的連續可用內存空間大于新生代對象總大小或者歷次晉升到老年代對象平均大小就執行minorGC,否則就fullGC.

3. 垃圾回收算法

  • 新生代采用標記-復制算法回收內存,理論上需要一半的內存來復制對象(不易產生內存碎片,但是可用內存會被壓縮一半),但是95%的對象都是朝生夕死,所以將新生代中的復制區域劃分為8:1,也就是可以使用整個新生代內存的90%,而不是一半。

  • 老年代采用的是標記-清除算法來回收內存,會產生不連續的內存碎片

  • 永久代(或者方法區)也可以回收,就是回收條件比較苛刻

  1. java堆中不存在該類實例

  2. 該類的classLoader都被回收

  3. 該類的java.long.Class都被回收,無法通過反射訪問改方法,滿足以上三條件,方法區內的類就被回收了。

4. 垃圾收集器

JVM的內存模型和垃圾回收機制

垃圾收集器對比
      名稱    使用范圍  原理                                         優缺點                                 
Serial新生代單線程,復制算法簡單高效,java虛擬機client模式下默認新生代垃圾收集器
ParNew新生代Serial+多線程ParNew收集器默認開啟和CPU數目相同的線程數,java虛擬機運行在Server模式下新生代的默認垃圾收集器,ParNew垃圾收集器在垃圾收集過程中同樣也要暫停所有其他的工作線程
Parallel Scavenge新生代多線程復制算法重點關注的是程序達到一個可控制的吞吐量
Serial Old(MSC) 老年代單線程標記整理算法Client默認的java虛擬機默認的年老代垃圾收集器,也會暫停所有線程
Parallel Old老年代多線程標記整理算法Parallel Old正是為了在年老代同樣提供吞吐量優先的垃圾收集器,如果系統對吞吐量要求比較高,可以優先考慮新生代Parallel Scavenge和年老代Parallel Old收集器的搭配策略
CMS老年代多線程標記清除算法

主要目標是獲取最短垃圾回收停頓時間,

最短的垃圾收集停頓時間可以為交互比較高的程序提高用戶體驗,總體上來看CMS收集器的內存回收和用戶線程是一起并發地執行

G1新生代/老年代
  1. 基于標記-整理算法,不產生內存碎片。

  2. 可以非常精確控制停頓時間,在不犧牲吞吐量前提下,實現低停頓垃圾回收

G1收集器避免全區域垃圾收集,它把堆內存劃分為大小固定的幾個獨立區域,并且跟蹤這些區域的垃圾收集進度,同時在后臺維護一個優先級列表,每次根據所允許的收集時間,優先回收垃圾最多的區域。區域劃分和優先級區域回收機制,確保G1收集器可以在有限時間獲得最高的垃圾收集效。

5. 結語

        jvm的內存回收依賴垃圾收集器,而垃圾收集器是垃圾回收算法的具體實現,可以通過啟動參數指定不同的新生代,老年代的垃圾回收器。所有垃圾回收器的優化方向都是盡可能的降低“stop the world”的耗時,也就是垃圾回收線程執行耗時,盡可能的提高cpu的吞吐量。不同的實現方案造成了不同的垃圾回收器。如serial,parallel,cms,沒有一種能夠適應所有的垃圾回收需求,都是根據義務需求組合使用,目前最牛掰的是G1回收器,但是生產環境幾乎沒有使用。

“JVM的內存模型和垃圾回收機制”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

永清县| 泽库县| 古丈县| 宕昌县| 札达县| 南乐县| 衢州市| 达孜县| 横峰县| 彭阳县| 上饶县| 江川县| 西丰县| 烟台市| 同仁县| 大连市| 商丘市| 仁怀市| 中西区| 峨山| 乌鲁木齐县| 漠河县| 靖安县| 南岸区| 南充市| 沅江市| 赣州市| 五莲县| 肃宁县| 正安县| 卫辉市| 凉山| 廉江市| 庆元县| 千阳县| 闽清县| 靖远县| 溆浦县| 和硕县| 丹东市| 广水市|