1. 程式人生 > >Java虛擬機之垃圾回收算法思想總結

Java虛擬機之垃圾回收算法思想總結

收集 內存 弊端 內存空間 碎片 加減 正在 分區 java

1、引用計數法

  這是個比較古老而經典的垃圾回收算法,其核心就是在對象被其他所引用的時候計數器加1,而當引用失去時減1。這個方法有非常嚴重的問題:無法此話有理循環引用的情況,還有就是每次進行加減操作比較浪費系統性能。

2、標記清除法

  分為標記和清除兩個階段進行回收內存中的對象,這個方法也有很大的弊端,就是空間碎片問題,垃圾回收後的空間不是連續的,不連續的內存空間的工作效率要低於連續的內存空間。

3、復制算法

  其核心思想就是將內存空間分為兩塊,每次只使用其中一塊,在垃圾回收時,將正在使用的內存中的保留對象復制到未被使用的內存塊中去,之後去清楚之前正在使用的內存塊中所有的對象,反復去交互兩塊內存的角色,完成垃圾收集。Java中的新生代form和to區就是使用這個算法。

4、分代算法

  根據對象的特點把內存分成N塊,每塊屬不同代,然後根據每代的特點使用不同的算法,對於新生代和老年代來說,新生代回收頻率高,但是每次回收耗時很短,而老年代回收頻率低,每次回收消耗時間長,所以應該盡量減少老年代的GC。

5、分區算法

  將整個內存分成N多個小的獨立的空間,每個小空間都可以獨立使用,這樣細粒度的控制一次回收少個小空間,而不是對整個空間進行GC,從而提升性能,減少GC停頓時間。

Java虛擬機之垃圾回收算法思想總結