如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位垃圾,则有可能会被垃圾回收器回收。
- 定位什么是垃圾,有两种方式来确定:
- 引用计数法
- 可达性分析算法
引用计数法
一个对象被引用了一次,在当前的对象递增一次引用计数,如果这个对象的引用次数为0,这代表这个对象可回收
当对象出现循环引用的时候,引用计数法就会失效,会引发内存泄漏
可达性分析算法(现在的虚拟机都是采用它)
哪些对象可以作为GC Root
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(Native方法)引用的对象