在JVM 中,java 為我們提供可有效的垃圾回收機制,GC ,GC的創建無疑是為了緩解內存壓力、保存有效數據、回收垃圾無效數據;
在此之前GC在我的理解中,一直只是個概念,內存中出現垃圾,GC來回收一下,處理下;但是對其內部如何定義一個對象是否是'垃圾'並不知曉!
昨天在工作的時候,為了理解native 關鍵字的使用的,順便也看到了一些blog對它的認知見解,我也學習了一下,如下是我的總結,希望也能有所收獲吧。
GC回收對象定義規則算法:
可達性分析算法:
先看圖:【來源網友的blog ,做了下標注】
大家可能會對這個GC root 感興趣了:我的理解是就是一個GC自己規定的有效對象根節點集合!!至於這個集合里面有啥玩意,能力不夠,目前不在糾結!
然后從圖上可以看出,從這個GC根集合里的所有元素(途中的GC roots 算一個元素)開始,網上查找被引用(指針含義類似)記錄,所有被引用的對象都是有效對象,說明它還是有用的,不用回收;然后看object5 出來的應用,說實話,這個應用已經沒有必要了,全部都是’‘沒用的’對象,等待被GC回收吧!
以上就是我對可達性分析算法的初步理解。
等等!!!!!!!!!!!求救麥待。。。。。。。
突然要記錄一下:目前大多數的JVM 使用的是
分代回收算法:將堆內存分為新生代和老年代。對這兩部分分別使用不同的回收算法。
老年代中存放大對象和長期存活的對象,且對象較多,一般使用標記-清除算法或者標記-整理算法。[可達性分析算法做基礎]
新生代存活對象較少,一般使用復制算法。
有的朋友會想到那具體的GC機制,如何回收這些對象內存的呢?以上紅底色的算法查詢下吧!!!