【JVM虚拟机篇09】对象什么时候被垃圾回收

29 阅读1分钟

如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位垃圾,则有可能会被垃圾回收器回收。

  • 定位什么是垃圾,有两种方式来确定:
    • 引用计数法
    • 可达性分析算法

引用计数法

一个对象被引用了一次,在当前的对象递增一次引用计数,如果这个对象的引用次数为0,这代表这个对象可回收

image.png

当对象出现循环引用的时候,引用计数法就会失效,会引发内存泄漏

image.png

可达性分析算法(现在的虚拟机都是采用它)

image.png

哪些对象可以作为GC Root

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中JNI(Native方法)引用的对象