在JVM 中,java 为我们提供可有效的垃圾回收机制,GC ,GC的创建无疑是为了缓解内存压力、保存有效数据、回收垃圾无效数据;
在此之前GC在我的理解中,一直只是个概念,内存中出现垃圾,GC来回收一下,处理下;但是对其内部如何定义一个对象是否是'垃圾'并不知晓!
昨天在工作的时候,为了理解native 关键字的使用的,顺便也看到了一些blog对它的认知见解,我也学习了一下,如下是我的总结,希望也能有所收获吧。
GC回收对象定义规则算法:
可达性分析算法:
先看图:【来源网友的blog ,做了下标注】
大家可能会对这个GC root 感兴趣了:我的理解是就是一个GC自己规定的有效对象根节点集合!!至于这个集合里面有啥玩意,能力不够,目前不在纠结!
然后从图上可以看出,从这个GC根集合里的所有元素(途中的GC roots 算一个元素)开始,网上查找被引用(指针含义类似)记录,所有被引用的对象都是有效对象,说明它还是有用的,不用回收;然后看object5 出来的应用,说实话,这个应用已经没有必要了,全部都是’‘没用的’对象,等待被GC回收吧!
以上就是我对可达性分析算法的初步理解。
等等!!!!!!!!!!!求救麦待。。。。。。。
突然要记录一下:目前大多数的JVM 使用的是
分代回收算法:将堆内存分为新生代和老年代。对这两部分分别使用不同的回收算法。
老年代中存放大对象和长期存活的对象,且对象较多,一般使用标记-清除算法或者标记-整理算法。[可达性分析算法做基础]
新生代存活对象较少,一般使用复制算法。
有的朋友会想到那具体的GC机制,如何回收这些对象内存的呢?以上红底色的算法查询下吧!!!