• 巩固 finalize() 方法


    1、java gc要回收对象的时候,首先要调用这个类的finalize方法,但是并不是调用这个finalize方法就等同于垃圾回收,只是在gc之前 finalize 方法会被调用,所以基本可以说其被回收了。

    2、但由于gc的自动回收机制,并不能保证 finalize 方法会被及时地执行(垃圾对象的回收时机具有不确定性),也不能保证它们会被执行(程序由始至终都未触发垃圾回收)。

    3、提供这样的机制的原因在于:让我们有时想在撤消一个对象时完成一些操作(有点像生命周期钩子),比如一些Java以外的代码编写的Class(比如JNI-Java Native Interface,C语言malloc()分配的内存),垃圾回收器并不能对这些部分进行正确的回收,进而在 finalize 方法中另外干预(那这些Class要怎么用java代码释放呢?让Java代码去运行个shell脚本?);或者释放非Java 资源(如打开的文件资源、数据库连接等)。

    4、如果在 finalize 中重新让对象不符合gc条件,这样对象就避开了一次gc,但下次对象再次符合条件的时候 finalize 不会被调用,因为 finalize 只能被调用一次(why)

    5、最后:它什么时候会被调用

    • 所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候。
    • 程序退出时为每个对象调用一次finalize方法。
    • 显式的调用finalize方法。(那这样算被调用一次吗?)

    再补充吧……

    参考:https://blog.csdn.net/crazylai1996/article/details/84900818

  • 相关阅读:
    django 如何重用app
    vim常用命令
    linux find grep
    linux su su-的区别
    linux定时任务crontab
    linux shell的单行多行注释
    python字符串的截取,查找
    gdb调试
    python字符转化
    python读写文件
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/10503924.html
Copyright © 2020-2023  润新知