finalize()方法也叫收尾方法。

一旦垃圾回收器准备好释放对象占用的存储空间,首先会去调用finalize()方法①进行一些必要的清理工作(对垃圾回收器不能处理的特殊情况进行处理)(例子在下边)②也有可能使该对象重新被引用,我习惯叫这种作用为复活。注意!!每个对象的finalize()方法只能被执行一次,第二次就会直接跳过finalize()方法,这就是为了防止出现对象无限复活,内存空间只增不减。

一般忽略第二种情况,概念就变成了:一旦垃圾收集器准备好释放对象占用的存储空间(进入第一个回收周期),首先会去调用finalize()方法进行一些必要的清理工作,只有到下一次再进行垃圾回收动作(下一个回收周期)的时候,才会真正释放这个对象所占用的内存空间。

例子:1)由于在分配内存的时候可能采用了类似 C语言的做法,而非JAVA的通常new做法。这种情况主要发生在native method中,比如native method调用了C/C++方法malloc()函数系列来分配存储空间,但是除非调用free()函数,否则这些内存空间将不会得到释放,那么这个时候就可能造成内存泄漏。但是由于free()方法是在C/C++中的函数,所以finalize()中可以用本地方法来调用它。以释放这些“特殊”的内存空间。2)又或者打开的文件资源,这些资源不属于垃圾回收器的回收范围。

System.runFinalization()和System.gc()是做什么的呢? 我个人的理解,这两个函数分别是应用层向JVM发出一个信号,告诉JVM,希望你能尽快的回收内存和调用对象的finaliztion方法,但是只是一个请求,而JVM只保证会尽最大的努力执行,但是具体什么时候执行以及会不会执行都是未知的。

java finalize 何时被调用_finalize()方法什么时候被调用?析构函数(final相关推荐

  1. java方法定义 与调用_Java方法的定义及调用

    Java方法的定义及调用 通过以上内容的学习,可以看出方法是一段可以完成某个特定功能的并且可以被重复利用的代码片段.接下来我们来学习一下方法应该怎么定义以及怎么调用. 定义/声明方法的语法格式如下所示 ...

  2. java 方法重载调用_Java方法的定义以及调用、方法重载、可变参数以及递归

    何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 System.out.println();/ ...

  3. Java第四天笔记02——方法的定义及调用

    目录 1.方法的定义 2.方法的声明 3.方法名词解释 4.方法的分类 5.方法的调用 6.方法中改变形参值 7.方法的重载 1.方法的定义 方法是完成某个功能的一组语句,通常将常用的功能写成一个方法 ...

  4. Java中带返回值的方法的定义与调用

    带返回值的方法定义: public static 数据类型 方法名(参数){return 数据;} 与前文中带返回值的方法定义不同的是,void变成了数据类型,对应return后紧跟的数据.这里顺便说 ...

  5. java反射调用接口方法参数_Java反射调用某个类的方法(带参数和不带参数)

    不多说,直接贴代码,不懂查API,现在就列取要用的方法和类. Class类: public Method getDeclaredMethod(String name, Class>... par ...

  6. 在controller类的每个方法执行前调用某个方法_springboot:异步调用@Async

    作者 |  迷茫中守候 来源 |  urlify.cn/MbMN32 66套java从入门到精通实战课程分享 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是 ...

  7. python子类如何调用父类方法_python中子类调用父类函数的方法示例

    前言 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况往往需要在子类里调用父类函数.下面话不多说了,来一起看看详 ...

  8. 使用vs调用DLL在运行时调用的方法,使用delph调用dll

    运行时调用: 1,将*.lib放在和32位debug,release和x64相同的文件夹下,将*.dll放在对应的debug或者release文件夹下: 2,在调用的文件中编写:在声明处编写  typ ...

  9. java 调用对象的方法_JAVA调用对象方法的执行过程

    JAVA调用对象方法的执行过程: ①.编译器查看对象的声明类型和方法名.假设调用x.f(parameter),  且隐式参数x声明为C类型的对象,有可能在C对象中存在多个参数类型和参数个数不同的f的方 ...

最新文章

  1. Swift中的选项集合
  2. JDK 是如何判断两个对象是否相同的?判断的流程是什么?
  3. Python钉钉报警及Zabbix集成钉钉报警
  4. “老年”程序员带你用Python玩街霸,你的童年用编程实现也很简单
  5. js中对于json判断的总结(持续整理中~)
  6. Linux之scsi网络存储
  7. php字符串怎么判断是否相等,php判断两个字符串是否相等
  8. 开源渗透测试工具合集
  9. cdlinux中minidwep的使用
  10. Python断言工具包assertP
  11. 全国区号省份mysql_中国各个省份的区号
  12. Python 学习:函数
  13. 转:有关Forth语言
  14. ARM Cortex 详解
  15. chrome浏览器打开网页排版错乱
  16. 服务器测速文件,云服务器测速代码
  17. 推荐几款性价比高的优盘
  18. Ajax 跨域请求详解
  19. 解决win10莫名其妙重启问题
  20. react生命周期详细介绍

热门文章

  1. php脚本开头注释_PHP文件注释标记及规范小结
  2. tsql是mysql中的吗_Mysql中的sql是如何执行的
  3. 智能关机软件 c语言,智能关机软件
  4. python方差分析模型的预测结果怎么看_statsmodels中方差分析表结果解析
  5. html window 属性,html中window对象top 、self 、parent 等属性
  6. vmware nat模式网络不通_【EVENG入门】 03EVENG网络运行环境(桥接模式、NAT模式、Cloud连接虚拟设备)...
  7. 计算机图形学图形旋转_计算机图形学翻译
  8. python中八进制_在Python中以八进制格式输入数字
  9. Java GregorianCalendar setTimeZone()方法与示例
  10. Modbus通信协议之CRC16冗余循环校验函数