1.引用计数法
记录每一个对象的引用次数,如果一个对象被其他变量所引用,那么这个变量的计数+1,如果这个对象被引用两次则计数为2。如果某一个变量不再引用它,那么计数就减一。如果减为0,那么就执行垃圾回收。但是这种情况有个问题,如果A引用B,B也引用A,存在循环引用,但是这两个对象没有人引用他们,但他们计数为1,这种情况下无法进行垃圾回收。
2.可达性分析法(针对上述问题,提出的解决方案)
可达性分析算法是判断哪些对象是根对象的算法,在垃圾回收之前对堆内所有对象进行扫描,首先要确定根对象,哪些可以作为根对象?
1.System Class 系统类(启动类加载器加载的类)
2.Native Stack 操作系统方法在使用时引用的java对象
3.Thread 活动线程中引用的一些对象(活动线程执行过程中,局部变量所引用的对象作为根对象)
4.Busy monitor 被加锁的对象Synchronize
本文介绍了引用计数法在垃圾回收中的应用,以及其遇到的循环引用问题。随后提出了可达性分析法,通过扫描堆内存找出根对象,有效处理了循环引用导致的垃圾回收难题,关注点包括SystemClass、NativeStack、线程局部变量和加锁对象。
5万+

被折叠的 条评论
为什么被折叠?



