1. 程式人生 > >Java垃圾回收(GC)機制詳解

Java垃圾回收(GC)機制詳解

nbsp 引用計數 維護 png 對象 最新 新的 com 前沿

垃圾回收算法有兩種,根據不同的虛擬機策略不同

1、引用計數法 2、可達性分析法

由於我們平常使用的hotspot虛擬機用的是第二種。

那哪些是可達的呢?

這個算法的基本思想是通過一系列稱為“GC Roots”的對象作為起始點,從這些節點向下搜索,搜索所走過的路徑稱為引用鏈,當一個對象到GC Roots沒有任何引用鏈(即GC Roots到對象不可達)時,則證明此對象是不可用的。在Java語言中可以作為GC Roots的對象包括:

· 虛擬機棧中引用的對象

· 方法區中靜態屬性引用的對象

· 方法區中常量引用的對象

· 本地方法棧中JNI(即Native方法)引用的對象

垃圾回收算法

1、標記-清除(Mark-Sweep)算法

2、復制(Copying)算法

3、標記-整理(Mark-Compact)算法

分代收集

根據上面的內容,用一張圖概括一下堆內存的布局

技術分享

這裏解釋一下為什麽有From Survivor和To Survivor。

垃圾收集器的聯系如下圖:

技術分享

最新的垃圾收集器是G1

G1收集器

G1(Garbage-First)收集器是當今收集器技術發展的最前沿成果之一,JDK 7 Update 4後開始進入商用。在G1收集器之前的其他收集器進行收集的範圍都是整個新生代或者老年代,而G1收集器不再是這樣,使用G1收集器時,Java堆的內存布局就與其他收集器有很大差別,它將整個Java堆分為多個大小相等的獨立區域(Region),雖然還保留有新生代和老年代的概念,但新生代和老年代不再是物理隔離的了,它們都是一部分Region的集合。G1收集器跟蹤各個Region裏面的垃圾堆積的價值大小,在後臺維護一個優先列表,每次根據允許的收集時間,優先回收價值最大的Region(這也是Garbage-First名稱的由來)。這種使用Region劃分內存空間以及有優先級的區域回收方式,保證了G1收集器在有限的時間內可以獲取盡可能高的收集效率。

Java垃圾回收(GC)機制詳解