Reference的状态
2021-12-09 23:13:47 0 举报
Reference的状态
作者其他创作
大纲/内容
next
Reference.Pending
有ReferenceQueue,GC先添加到Pending list。
Reference
没有ReferenceQueue,GC修改状态
discovered
head
Pending list,全局队列
Enqueued
queue = 注册的 ReferenceQueue,next=this
从ReferenceQueue移除后
Inactive
ReferenceQueue,头插法,出队也是头部
ReferenceHandler线程将pending list中的reference移动到referenceQueue
最后一个指向自己
因为用户线程也可以将Reference添加到ReferenceQueue,为了不干扰用户线程的执行,所以先添加到Pending list
Active
ReferenceHandler线程通过Reference.lock和GC线程同步,ReferenceHandler线程是最高优先级并且Reference类加载的时候启动,会尽可能先于对象创建和用户代码执行并调用wait等待GC线程notifyAll
Pending
新建Reference的状态,queue = 创建时注册的 ReferenceQueue或者没有队列,next=null,只有当Reference对象的next为null也就是状态位active时,GC才需要特殊对待其中的referent引用字段
0 条评论
下一页