Java虚拟机-03 对象回收标记

对象回收标记方法

  • 引用计数:为每一个引用的对象计数,计数为0则表示可以回收。缺陷:可能形成孤岛,两个对象相互引用,但是整个应用程序中没有引用这两个对象,造成内存泄漏
  • 根(GC Roots)搜索法:为对象到GC Roots根节点计数,为0则表示可以回收,大多数jvm都是通过该方法实现

可作为GC Roots的对象

  1. 栈中引用的对象
  2. 类静态属性引用的对象
  3. 常量引用的对象
  4. native方法引用的对象

引用分类

  1. 强引用String Reference:只要引用存在,永不回收
  2. 软引用Soft Reference:OOM之前,可强行回收
  3. 弱引用Weak Reference:最近的一次GC一定回收
  4. 虚引用Phantom Reference:作用,对象回收可以收到通知

finalize方法

对象回收之前执行finalize方法,可以避免被回收,只会被系统调用一次

建议不要使用,原因:运行代价高,不确定性大,无法保证对象调用顺序

方法区回收

回收对象

  • 废弃常量
  • 无用类

无用类必须满足3个条件

  1. 类实例都被回收了
  2. 类对应的ClassLoader被回收了
  3. 类对应的java.lang.Class对象无引用,且没有任何地方能通过反射调用该类


分享到:


相關文章: