链接: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. iOS开发笔记--UIView中的坐标转换
  2. oracle pid查看,查看佔用aix oracle pid
  3. TOP级CG行业云渲染服务的演进之路
  4. 关于 PHP 5.4 你所需要知道的
  5. 自定义实现moveable button
  6. mysql 跳过一个事物_MYSQL GTID跳过指定事务
  7. BZOJ4519 CQOI2016不同的最小割(最小割+分治)
  8. JavaEE学习04--requestresponse
  9. java-java动态性之反射,动态编译,动态执行js及动态字节码操作
  10. itunes安装失败 “apple应用程序支持安装失败”
  11. 脱壳实践之寻找OEP——堆栈平衡法
  12. 求两个数的最小公倍数c语言程序,用C语言求两个数的最大公约数和最小公倍数...
  13. 删库跑路最佳实践总结
  14. 网站地图Sitemap怎么制作
  15. liunx基础知识篇 偏指令
  16. Android Retrofit
  17. 项目管理中的团队建设
  18. OpenStack配置Cinder出现“You must set cylinders.You can do this from the extra functions menu.”解决办法
  19. JavaScript基础知识和jQuery基础知识简介
  20. python字典添加主键_Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)...

热门文章

  1. rust最低什么显卡能游戏_腐蚀Rust配置要求汇总 腐蚀Rust游戏配置要求是什么_游侠网...
  2. Linux监控命令之==sar
  3. linux中时间命令详解
  4. Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译运行,格式化代码)
  5. websocket.js
  6. oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)
  7. 2014校招 百度试题及答案
  8. SkyEye图形化界面使用技巧篇(二)
  9. 编译器前端概述与可信编译器
  10. 小型空仓库图片_大中型的食品企业为何都青睐自动化立体仓库?