object finalized_finalize()方法

object finalized_finalize()方法一、一次标记首先finalize方法是在垃圾回收时,用于确认该对象是否确认被回收的一个标记过程。确认一个对象真正被回收需要经历两次标记过程:可达性分析没有引用,这是第一次标记是否有必要执行finalize方法,如果对象没有重写finalize方法或者finalize方法已经被调用过了,那么finalize方法就是没有必要执行的,没有必要执行finalize方法的对象就会被直接回收。如果对象被判定为有必要执行finalize()方法,那么这个对象将会放置在一个叫做F-Queue的队列之中,并在稍后

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、一次标记

首先finalize方法是在垃圾回收时,用于确认该对象是否确认被回收的一个标记过程

确认一个对象真正被回收需要经历两次标记过程:

  • 可达性分析没有引用,这是第一次标记
    是否有必要执行finalize方法,如果对象没有重写finalize方法或者finalize方法已经被调用过了,那么finalize方法就是没有必要执行的,没有必要执行finalize方法的对象就会被直接回收。如果对象被判定为有必要执行finalize()方法,那么这个对象将会放置在一个叫做F-Queue的队列之中,并在稍后由一个由虚拟机创建、低优先级的finalizer线程去执行它。这里所谓的“执行”是指虚拟机会触发这个方法,但并不承诺会等待它运行结束,这样做的原因是,如果一个对象的finalize()执行缓慢,极端情况下死循环,那么就会导致F-Queue队列中其他对象永久处于等待,甚至导致整个内存回收系统崩溃。

  • finalize()方法是对象逃脱死亡命运的最后一次机会,稍后GC将对F-Queue中的对象进行第二次小规模的标记,如果对象要在finalize()成功拯救自己——只需要重新与引用链上的任何一个对象建立关联即可,譬如把this关键字赋值给某个类的变量或者对象的成员变量,那么第二次标记时它将会被移出“即将回收”的集合;如果对象这时还没有逃脱,那么它就真正被回收了

/** * Finalizer方法逃避GC * 但是只能逃避一次 * create by chenxichao */
public class FinalizerEscapeGc { 
   

    public static FinalizerEscapeGc SAVE_HOOK = null;

    public void isAlive(){ 
   
        System.out.println("yes i am still alive :)");
    }

    @Override
    protected void finalize() throws Throwable { 
   
        super.finalize();
        System.out.println("finalize method execute");
        FinalizerEscapeGc.SAVE_HOOK = this;
    }

    public static void main(String[] args) throws Exception{ 
   
        SAVE_HOOK = new FinalizerEscapeGc();

        //对象第一次成功拯救自己
        SAVE_HOOK = null;
        System.gc();
        //因为finalize方法的优先级很低,所以睡一下
        Thread.sleep(500);
        if(SAVE_HOOK != null){ 
   
            SAVE_HOOK.isAlive();
        }else{ 
   
            System.out.println("no i am dead");
        }


        //第二次自救失败
        SAVE_HOOK = null;
        System.gc();
        //因为finalize方法的优先级很低,所以睡一下
        Thread.sleep(500);
        if(SAVE_HOOK != null){ 
   
            SAVE_HOOK.isAlive();
        }else{ 
   
            System.out.println("no i am dead");
        }
    }
}

二、 总结

  • finalize方法不是一定会执行,只有在该方法被重写的时候才会执行 f
  • inalize方法只会被执行一次
  • 对象可以在finalize方法中获得自救,避免自己被垃圾回收,同样自救也只能一次
  • 不推荐Java程序员调用该方法,因为finalize方法代价很大
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191991.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件测试之BUG的生命周期

    作为一名测试人员,重要的工作内容之一,就是找BUG,提交BUG,验证BUG,推进BUG的解决,直至软件达到发布的标准,提高软件的质量,及研发的工作效率和质量。要找BUG,那么,就要先了解一下BUG的定义是什么?BUG的定义:软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与…

    2022年4月5日
    74
  • 电商接口测试用例_连连电商跨境

    电商接口测试用例_连连电商跨境按照两种模式进行划分总结:1.按照测试类型2.按照电子商务网站的系统架构1.按照测试类型来划分1.兼容性1.1主要是在浏览器兼容(360浏览器IE6IE8浏览器)12.操作系统,主要体现在操作系统兼容(xpwin2003win2007)2.UI测试2.1检查连接是否正确2.2是否有文字错误信息2.2产品价格是否有显示错误。3.用户体验测试UE3.1首页产品的展示与分类3.2搜索结果页,搜索…

    2022年9月28日
    0
  • af-s af-f_read fpdma queued

    af-s af-f_read fpdma queued1.PDAF驱动功能验证1.1pdaflog设置log设置,打开AF(8),State(2),Sensor(2)的logCT30P:/#cat/vendor/etc/camera/camxoverridesettings.txtoverrideLogLevels=0x3FlogWarningMask=0x08000202logInfoMask=0x08000202logVerboseMask=0x08000202enable3ADebugData=TRUEdumpSens

    2022年9月7日
    0
  • DB破解(暗黑破坏神辅助)使用方法「建议收藏」

    DB破解(暗黑破坏神辅助)使用方法「建议收藏」下载网址:http://www.mochafuzhu.com/forum.php?mod=forumdisplay&fid=57开始请先在网站里下载运行环境并安装,然后下载辅助。(Q群:528411948)1、首先,一定要先 启动游戏,注意!辅助的路径千万不要有中文的目录,否则会造成辅助自动退出的问题。然后解压下载好辅助后,我们得到以下画面,以管理员身份运行打开。(如果不能打开请检…

    2022年5月5日
    65
  • 单道批处理系统,多道批处理系统,分时系统比较(概念,特点,优缺点)

    单道批处理系统,多道批处理系统,分时系统比较(概念,特点,优缺点)本文关于单道批处理系统 多道批处理系统及分时系统的三者对比主要是从概念 特点 优缺点等方面展开 参考内容 华中科技大学软件学院苏曙光老师的操作系统原理课程及现代操作系统第四版 一 单道批处理系统 1 概念 2 特点自动 作业自动运行 无需干预批量 磁带上的各个作业按顺序地进入内存 先调入先完成单道 内存中仅有一道程序运行 可以看成是串行的 3 CPU 的利用情况分析 外设和 CPU

    2025年7月6日
    1
  • goland 2021.05 激活码【在线破解激活】

    goland 2021.05 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号