1. 程式人生 > >java虛擬機器如何實現垃圾回收

java虛擬機器如何實現垃圾回收

複製演算法:複雜演算法是在標記-清除演算法上的改進,打個比方,它會將記憶體容量分為兩部分,每次只用其中一個部分,當這一塊記憶體用完時就將這塊記憶體所有未被收集的物件複製到另一個記憶體,然後把已使用過的記憶體一次清理掉,這樣每次都是對其中的一快記憶體進行回收,複製到另一個記憶體也不會產生碎片,所以這個演算法比較高效和簡單,但是存在一個問題就是另一個記憶體佔據一半空間其實是很浪費的,其實真是情況並不是完全按照1:1來分配的,而是把一整塊記憶體類似分為成8:1:1三個部分,分別是大的記憶體Eden和兩個小記憶體Survivor,每次使用的都是一個Eden和一個Survivor,然後把沒有回收的部分拷到另一個survivor,清除掉Eden和Survivor中被回收的記憶體,如此迴圈,也就是預設可用的記憶體佔據總記憶體的90%,只用10%會被浪費,但當我們存活的資料超過10%的話,就需要依賴其他記憶體,對多餘未使用的物件進行擔保