您好,登錄后才能下訂單哦!
上回說到《不識JVM真面目,只緣身在增刪查改中》
講述了一些有關于Jvm,線程,棧的有關技術知識,還有兩個關于JVM的面試題:
GC——垃圾回收
完整意味著有多種情況
今天就接著將視頻內容介紹完
可達性分析算法——GC Roots
判斷對象的存活
在Java, 可作為GC Roots的對象包括:
1、Java堆是垃圾回收器管理的主要區域
2、基于分代的方式
(1)新生代
(2)老年代
3、Java堆的大小參數設置
-Xmx 堆區內存可被分配的最大上限
-Xms 堆區內存初始內存分配的大小
新生代垃圾回收算法——復制算法
該算法的核心是將可用內存按容量劃分為大小相等的兩塊, 每次只用其中一塊, 當這一塊的內存用完, 就將還存活的對象復制到另外一塊上面, 然后把已使用過的內存空間一次清理掉.
優點
缺點
最優設置
90%的對象都是朝生夕死的,所以使用10%的空間用作交換區,因為交換區必須有等量的兩個,所以采用復制算法的新生代中的三個區采用8:1:1的默認分配比例。
新生代對象的分配和回收
對象分配
(參數配置:-XX:SurvivorRatio )Eden區與Survivor區的大小比值。默認是8
思考:如果new對象過大?
老年代對象的分配和回收
老年代的對象一般情況下來自新生代
(1)長期存活對象進入老年代
(2)大對象直接進入老年代
(3)對象提前晉升(組團)
動態年齡判定:如果在Survivor空間中相同年齡所有對象大小的總和大于Survivor空間的一半,年齡大于或等于該年齡的對象就可以直接進入老年代, 而無須等到晉升年齡.
JVM中一次完整的GC流程是怎樣的?
從上兩節總結出的一個面試題
對象的正常流程
Eden -> Survivor區 -> 老年代
內存區域不夠用了,就會引發GC
作為架構師該怎么做:Minor GC避免不了,Full GC盡量避免
處理方式:保存堆棧快照日志、分析內存泄露、調整內存設置控制垃圾回收頻率,選擇適合的垃圾回收器
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。