[JVM笔记].对象已死?

140 阅读1分钟
  1. 引用计数
  • 缺点:循环引用会导致无法回收
  1. 可达性分析
  • 可作为GC Roots的对象:虚拟机栈(本地变量表)中引用的对象;方法区中类的静态属性引用的对象;在方法区中常量引用的对象;在本地方法中引用的对象;java虚拟机内部的引用;所有被同步锁持有的对象;反映java虚拟机内部情况的JMXBean、JVMTI中注册的回溯、本地代码缓存等。

\

引用分类

  1. 强引用:指在代码中普遍存在的引用,如object obj = new object();
  2. 软引用:描述一些有用,但是非必须得对象。在系统即将内存溢出的时候会把他们列进回收范围内进行二次回收;
  1. 弱引用:描述非必须的对象,但是程度比软引用低,只能生存到下一次垃圾回收之前,无论内存是否足够。
  2. 虚引用:也称幽灵引用或者幻影引用,为一个对象设置虚引用关联的唯一目的是为了能在进行gc的时候收到一个系统通知

\

生存还是死亡

首先,即使在可达性分析算法被判定为不可达的对象,也不是“非死不可”的,这个时候他们处于“缓刑”阶段,要真正宣告一个对象死亡,最多会经历两次标记过程:

第一次标记:在进行可达性分析的时候发现没有与GC Roots相连接的引用链

第二次标记:判断此对象是否有必要执行finalize()方法