zoukankan      html  css  js  c++  java
  • Java虚拟机学习笔记(三)--- 生存还是死亡

      即便是可达性分析中不可达的对象,也不代表该对象一定被回收,一个对象被“宣判死刑”需要经过两次标记,第一次是被可达性算法标记为不可用,然后进入第二次筛选,筛选条件是对象是否有必要执行finalize()方法,如果对象没有覆盖finalize()方法,或者finalize()已经被虚拟机调用过,则该对象被判断为没有必要执行finalize()方法,也就是确定将被回收。

      如果对象被判定为有必要执行finalize()方法,那么这个对象将被放到叫做F-Queue的队列中,并在稍后由一个虚拟机自动创建的、优先级低的finalizer线程去执行它。(由于该线程优先级,运行缓慢,所以虚拟机不一定会等待该线程结束)稍后GC将对finalizer线程的对象进行第二次标记。如果对象将自己与引用链上的任何一个对象建立联系,例如,将自己(this)赋值给某一个对象的成员变量或者类的变量,对象也就实现了自救,将被移除即将被回收的队列,否则该对象将真的被回收。注意:finalize()方法只能被执行1次或者0次

      

  • 相关阅读:
    排序
    Apache架设Web服务器
    函数调用规范
    linux启动流程
    Make工程管理器
    网络相关知识
    数字电路中的建立时间与保持时间
    面试碰到的技术题
    嵌入式linux的驱动程序
    EF实体中的修改
  • 原文地址:https://www.cnblogs.com/bjm1/p/10375197.html
Copyright © 2011-2022 走看看