JVM之垃圾收集算法
生活随笔
收集整理的這篇文章主要介紹了
JVM之垃圾收集算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在C++中垃圾回收是需要程序員顯示地進行收集,在java語言中是由JVM進行負責垃圾收集的,以下介紹幾種垃圾收集算法的思想。
- 標記-清除算法
標記-清除是最基礎的算法,就如其名字一樣,分為“標記”、“清除”兩個階段:首先標記出所有需要回收的對象,在標記完成后統一回收所有被標記的對象。其主要的缺點有兩個,一個是效率問題,標記和清除兩個過程的效率都不高,另一個是空間問題,在標記清除完成后,會產生大量不連續的內存碎片,空間碎片過多時會導致程序在以后的運行過程中需要分配大對象時,無法找到足夠的連續內存而不得不觸發另一次垃圾收集動作。 - 復制算法
為了解決效率問題,可以使用復制算法,復制算法將可用內存按容量分為大小相等的兩部分,每次只使用其中的一塊,在垃圾收集時,將已使用的內存中的還存活的對象復制到另一個內存中,然后把已使用過的內存進行內存回收,內存分配時就不會產生內存碎片的問題。但是此算法將內存減少一半,付出的代價相對較高。現代商業虛擬機中將內存分為一塊較小的Eden空間和兩塊較小Survivor空間,Hotspot虛擬機中默認Eden和Survivor的大小比例是8:1,也就是每次新生代中可用內存為整個新生代容量的90%(80%+10%),只有10%會被浪費。 - 標記-整理算法
標記整理算法和標記清除類似,其過程為標記、整理、清除三個標段。在可回收對象被標記后會將還存活的對象移動到另外一端,然后清理掉先前一端的內存。 - 分代收集算法
分代收集算法根據對象的存活周期的不同將內存劃分為幾塊,一般分為新生代和老年代。這樣就可以根據各個年代的特點采用何時的收集算法。在新生代中,,每次垃圾收集時都有大批對象死去,只有少量存活,那就選用復制算法。而老年代中因為對象存活率高、沒有額外空間對它進行分配擔保,就必須使用“標記-清除”或者“標記-整理”算法來進行回收。
總結
以上是生活随笔為你收集整理的JVM之垃圾收集算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32寻迹智能车
- 下一篇: R语言图解“等额本金与等额本息”