引用计数法
给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象就是垃圾可被回收
比如 a 线程中某个栈帧使用某个对象,这个对象的引用计数器+1,调用结束,引用计数器-1
这个方法实现简单,效率高,但是并不可取,当循环引用时,引用计数器永远不会是0,就造成了内存泄漏
可达性分析算法
通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是存活的,不可达的对象就是垃圾可被回收
可以作为 GC Root 的对象如下
- 虚拟机栈中引用的对象
- 本地方法栈中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中的常量引用的对象
比如 a 线线程中栈帧1用了对象a,而对象a引用了对象b,a 就作为 GC Root,当线程存活时,b 对象就不会被回收>
标签:java,对象,是否是,计数器,GC,引用,线程,垃圾 From: https://www.cnblogs.com/hangychn/p/17318054.html