JAVA--GC 垃圾回收机制----可达性分析算法

在JVM 中,java 为我们提供可有效的垃圾回收机制,GC ,GC的创建无疑是为了缓解内存压力、保存有效数据、回收垃圾无效数据;

在此之前GC在我的理解中,一直只是个概念,内存中出现垃圾,GC来回收一下,处理下;但是对其内部如何定义一个对象是否是'垃圾'并不知晓!

昨天在工作的时候,为了理解native 关键字的使用的,顺便也看到了一些blog对它的认知见解,我也学习了一下,如下是我的总结,希望也能有所收获吧。

GC回收对象定义规则算法:

可达性分析算法:

先看图:【来源网友的blog ,做了下标注】

大家可能会对这个GC root 感兴趣了:我的理解是就是一个GC自己规定的有效对象根节点集合!!至于这个集合里面有啥玩意,能力不够,目前不在纠结!

然后从图上可以看出,从这个GC根集合里的所有元素(途中的GC roots 算一个元素)开始,网上查找被引用(指针含义类似)记录,所有被引用的对象都是有效对象,说明它还是有用的,不用回收;然后看object5 出来的应用,说实话,这个应用已经没有必要了,全部都是’‘没用的’对象,等待被GC回收吧!

以上就是我对可达性分析算法的初步理解。

等等!!!!!!!!!!!求救麦待。。。。。。。

突然要记录一下:目前大多数的JVM 使用的是

分代回收算法:将堆内存分为新生代和老年代。对这两部分分别使用不同的回收算法。

老年代中存放大对象和长期存活的对象,且对象较多,一般使用标记-清除算法或者标记-整理算法。[可达性分析算法做基础]

新生代存活对象较少,一般使用复制算法

有的朋友会想到那具体的GC机制,如何回收这些对象内存的呢?以上红底色的算法查询下吧!!!

 

posted @ 2019-02-26 10:44  Ankermaker  阅读(1416)  评论(0编辑  收藏  举报