链接:https://www.nowcoder.com/questionTerminal/d8eab06913084e42b515633604eef7cd?pos=28&mutiTagIds=570&orderByHotValue=0&done=0
来源:牛客网

参考:《深入理解Java虚拟机》 
对于Java而言: 
调用时机:当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记过程:如果对象在进行可达性分析后发现没有和GC Roots相连接的引用链,就会被第一次标记,并且判断是否执行finalizer( )方法,如果对象覆盖finalizer( )方法且未被虚拟机调用过,那么这个对象会被放置在F-Queue队列中,并在稍后由一个虚拟机自动建立的低优先级的Finalizer线程区执行触发finalizer( )方法,但不承诺等待其运行结束。 
finalization的目的:对象逃脱死亡的最后一次机会。(只要重新与引用链上的任何一个对象建立关联即可。)但是不建议使用,运行代价高昂,不确定性大,且无法保证各个对象的调用顺序。可用try-finally或其他替代。

1)垃圾回收器(garbage collector)决定回收某对象时,就会运行该对象的finalize()方法; 2)GC本来就是内存回收了,应用还需要在finalization做什么呢? 答案是大部分时候,什么都不用做(也就是不需要重载)。只有在某些很特殊的情况下,比如你调用了一些native的方法(一般是C写的),可以要在finaliztion里去调用C的释放函数。

转载于:https://www.cnblogs.com/williamjie/p/11459794.html

finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?相关推荐

  1. java finalize方法的使用

    <JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...

  2. 转.net内存回收与Dispose﹐Close﹐Finalize方法

    一. net的对象使用一般分为三种情况﹕ 1.创建对象 2.使用对象 3.释放对象 二.创建对象 1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象 2.变量类型宣告(declare),如﹕ Fi ...

  3. finalize方法

    ​ finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存时,该方法被调用,即当一个对象被虚拟机宣告死亡时会先调用它的finalize()方法,让此对象临终前交代点遗言,当然对象 ...

  4. java finalize逃脱_Java对象回收与finalize方法

    生存还是死亡 事实上,即使被可达性分析算法判断为不可达,对象也不是"非死不可",对象会先进入"缓刑"状态.要真正宣告一个对象死亡,至少要经历两次标记过程: 如果 ...

  5. .net内存回收与Dispose﹐Close﹐Finalize方法

    .net内存回收与Dispose﹐Close﹐Finalize方法 一. net的对象使用一般分为三种情况﹕ 1.创建对象 2.使用对象 3.释放对象 二.创建对象 1.创建对象实际分为两个步骤﹕变量 ...

  6. 【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )

    文章目录 一.可达性分析算法 二.GC Root 示例 三.GC 回收前的两次标记 四.finalize 方法示例 一.可达性分析算法 在 堆内存 中 , 存在一个 根对象 GC Root , GC ...

  7. java finalize逃脱_JVM【第十三回】:【Java对象存活------finalize()方法】

    在根搜索算法中不可达的对象,也并非是"非死不可"的,这个时候他们暂时处于"缓刑"阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行根搜索后发现 ...

  8. 【java.lang.ref】当WeakReference的referent重写了finalize方法时会发生什么

    问题 question:当WeakReference的referent重写了finalize方法时会发生什么? 测试代码 JVM中是存在这样的情况的:一个Java对象,重写了finalize方法,在使 ...

  9. Java中finalize方法的使用(经典白学,新idk已经弃用)

    在jdk文档中,其解释为当垃圾回收器确定不存在对该对象的更多的引用时,由对象的垃圾回收器调用此方法. 什么情况下会被回收:某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,用垃圾回收机制调 ...

最新文章

  1. Go 学习笔记(74)— Go 标准库之 unsafe
  2. mysql的条件替换_MySQLwhere条件替换疑问?
  3. kali使用openvas
  4. rabbitmq实战_RabbitMQ 实战系列之:消息传递
  5. servletcontext 使用解析
  6. LeetCode 第 28 场双周赛(505/2144,前23.6%)
  7. 应用程序框架实战二十二 : DDD分层架构之仓储(层超类型基础篇)
  8. mac 卸载 mysql su_UBUNTU 彻底删除 MYSQL 然后重装 MYSQL
  9. extjs中grid中行内文本或图片居中显示
  10. RequestsLibrary库入门介绍
  11. layui 弹出框改变按钮颜色样式 自定义皮肤
  12. 输入n个整数,输出其中最小的k个
  13. 选数洛谷c语言,洛谷OJ-P1036 选数 题解(递归DFS)
  14. AVOD-理解系列(二)
  15. ubuntu查看显卡驱动以及其他驱动
  16. MATLAB中绘制椭圆
  17. Xiaojie雷达之路---DPM External Functions详解
  18. 硬盘的读写原理(图文详解)
  19. 博实结将在创业板上会:计划募资25亿元,周小强为实际控制人
  20. 【Python学习笔记】利用mplfinance画K线图

热门文章

  1. 鸟叔linux命令大全,[鸟哥linux视频教程整理]02_01_linux操作系统及常用命令
  2. axure,购物车数量递增或递减
  3. 判断数组是否有重复值
  4. 【9603】最大整数
  5. 简单博弈论总结加例题解析
  6. 对软件工程实践课程的预定目标
  7. python培训一般多久_零基础学python需要多久
  8. 网络协议:TCP保活机制和Nagle算法
  9. MemoryRecords分析
  10. (76)ila使用?