您好,登錄后才能下訂單哦!
本篇內容主要講解“java GC算法基礎知識點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java GC算法基礎知識點有哪些”吧!
相關術語翻譯說明:
Mark,標記;
Sweep,清除;
Compact,整理; 也有人翻譯為壓縮,譯者認為GC時不存在壓縮這回事。
Copy,復制; copy 用作名詞時一般翻譯為拷貝/副本,用作動詞時翻譯為復制。
注: 《垃圾回收算法手冊》將 Mark and Sweep 翻譯為: 標記-清掃算法; 譯者認為 標記-清除 更容易理解。
本章簡要介紹GC的基本原理和相關技術, 下一章節再詳細講解GC算法的具體實現。各種垃圾收集器的實現細節雖然并不相同,但總體而言,垃圾收集器都專注于兩件事情:
查找所有存活對象
拋棄其他的部分,即死對象,不再使用的對象。
第一步, 記錄(census)所有的存活對象, 在垃圾收集中有一個叫做 標記(Marking) 的過程專門干這件事。
現代JVM中所有的GC算法,第一步都是找出所有存活的對象。下面的示意圖對此做了最好的詮釋:
首先,有一些特定的對象被指定為 Garbage Collection Roots(GC根元素)。包括:
當前正在執行的方法里的局部變量和輸入參數
活動線程(Active threads)
內存中所有類的靜態字段(static field)
JNI引用
其次, GC遍歷(traverses)內存中整體的對象關系圖(object graph),從GC根元素開始掃描, 到直接引用,以及其他對象(通過對象的屬性域)。所有GC訪問到的對象都被標記(marked)為存活對象。
存活對象在上圖中用藍色表示。標記階段完成后, 所有存活對象都被標記了。而其他對象(上圖中灰色的數據結構)就是從GC根元素不可達的, 也就是說程序不能再使用這些不可達的對象(unreachable object)。這樣的對象被認為是垃圾, GC會在接下來的階段中清除他們。
在標記階段有幾個需要注意的點:
在標記階段,需要暫停所有應用線程, 以遍歷所有對象的引用關系。因為不暫停就沒法跟蹤一直在變化的引用關系圖。這種情景叫做 Stop The World pause (全線停頓),而可以安全地暫停線程的點叫做安全點(safe point), 然后, JVM就可以專心執行清理工作。安全點可能有多種因素觸發, 當前, GC是觸發安全點最常見的原因。
此階段暫停的時間, 與堆內存大小,對象的總數沒有直接關系, 而是由存活對象(alive objects)的數量來決定。所以增加堆內存的大小并不會直接影響標記階段占用的時間。
標記 階段完成后, GC進行下一步操作, 刪除不可達對象。
各種GC算法在刪除不可達對象時略有不同, 但總體可分為三類: 清除(sweeping)、整理(compacting)和復制(copying)。下一章節將詳細講解這些算法。
Mark and Sweep(標記-清除) 算法的概念非常簡單: 直接忽略所有的垃圾。也就是說在標記階段完成后, 所有不可達對象占用的內存空間, 都被認為是空閑的, 因此可以用來分配新對象。
這種算法需要使用 空閑表(free-list),來記錄所有的空閑區域, 以及每個區域的大小。維護空閑表增加了對象分配時的開銷。此外還存在另一個弱點 —— 明明還有很多空閑內存, 卻可能沒有一個區域的大小能夠存放需要分配的對象, 從而導致分配失敗(在Java 中就是 OutOfMemoryError)。
標記-清除-整理算法(Mark-Sweep-Compact), 將所有被標記的對象(存活對象), 遷移到內存空間的起始處, 消除了標記-清除算法的缺點。 相應的缺點就是GC暫停時間會增加, 因為需要將所有對象復制到另一個地方, 然后修改指向這些對象的引用。此算法的優勢也很明顯, 碎片整理之后, 分配新對象就很簡單, 只需要通過指針碰撞(pointer bumping)即可。使用這種算法, 內存空間剩余的容量一直是清楚的, 不會再導致內存碎片問題。
標記-復制算法(Mark and Copy) 和 標記-整理算法(Mark and Compact) 十分相似: 兩者都會移動所有存活的對象。區別在于, 標記-復制算法是將內存移動到另外一個空間: 存活區。標記-復制方法的優點在于: 標記和復制可以同時進行。缺點則是需要一個額外的內存區間, 來存放所有的存活對象。
到此,相信大家對“java GC算法基礎知識點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。