垃圾收集器與內存分配策略---垃圾收集算法

垃圾收集算法

(1)標記-清除算法

  算法分爲兩個步驟:首先標記出全部須要回收的對象,在標記完成後統一回收全部被標記的對象算法

  方法不足3d

  (1)標記和清除兩個過程的效率都不高。對象

  (2)標記清除後對產生大量的內存碎片,致使程序分配較大的對象時,沒法找到足夠的連續內存而不得不提早觸發一次垃圾收集動做。blog

(2)複製

  將內存分爲兩塊,每次只使用其中的一塊,當這一塊內存用完了,就將還活躍的對象移到另外一塊內存上,而後把已使用的內存一次性清理,這樣是對內存半區進行內存回收,內存分配時也不用擔憂內存碎片等問題。內存

  現代的虛擬機都採用這種算法來回收新生代,可是不是將內存分紅兩塊,而是將內存分紅一塊較大的Eden區兩塊survivor區,每次使用Eden區和一塊survivor區,在回收時,將Eden區和一塊survivor區中還活着的對象複製到另外一塊survivor區,最後清理Eden區和那塊survivor區。虛擬機

​  當另一塊survivor區沒有足夠的內存存放上一次新生代收集的下來的存活對象,就須要老生代進行分配擔保。即這些對象直接進入老年代效率

(3)標記-整理

  該算法使用在老年代,標記過程和標記-清除算法同樣,不一樣的是收集階段,是讓全部存活的對象都向一端移動,而後直接清理掉邊界之外的內存程序

(4)分代收集

  現代的商業虛擬機都採用分代收集算法進行垃圾收集,它根據對象的存活期將內存分爲幾塊,不一樣的塊,採用不一樣的收集算法。方法

​  新生代:複製im

​  老年代:標記-清除或者標記-整理

相關文章
相關標籤/搜索