Java中finalize()方法的使用
1、finalize()方法是什么?
finalize()方法是Object类提供的方法,在GC(垃圾回收器)准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。其在Object中定义如下:
protected void finalize() throws Throwable { }
2、finallize()方法什么时候被调用?
在java中,由于垃圾回收器(GC)的机制是自动回收,所以垃圾回收的时机具有不确定性,finallize()也可能自始自终都不被调用。
3、什么时候使用它?
这个函数一般用于关闭非java资源(如文件,数据库连接池等),也用于关闭java语言调用其他语言(如c语言等)而产生的内存空间。
4、尽量避免使用这个函数。
垃圾回收具有不确定性,也大有可能在资源耗尽前无法执行这个函数,因而最好手动调用的显示的close()方法。
5、具体使用
定义一个类Person,重写Object类的finalize()方法,在对象被销毁前将执行这个方法,将“对象即将被销毁”打印到控制台。在默认情况下,通过System.gc()或Runtime.getRuntime()的调用,会显示的触发FullGC,同时对老年代和新生代进行回收,会尝试释放掉被丢弃对象占用的内存。但是也不一定成功,只能说增大了对象被会回收的概率。
public class FinalizeDemo01 {public static void main(String[] args) {for (int j = 0; j < 100000; j++) {Person person = new Person();person=null;/*** 增大概率*/System.gc();}}
}
class Person{/*** 有概率回收。* 垃圾回收前自动调用此方法。*/@Overrideprotected void finalize(){System.out.println("对象即将被销毁");}
}
Java中finalize()方法的使用相关推荐
- Java 中finalize()方法起什么作用呢?
转自: Java 中finalize()方法起什么作用呢? Java之finalize()方法功能说明 当我们在一个类中定义了finalize()方法时, 如果一个对象被垃圾收集器析构(回收)之前,则 ...
- Java中finalize方法用途何在?
1 package thinking.in.java.demo; 2 3 /* 4 * finalize的用途何在? 5 * 6 *本例的终止条件是L所有的Book对象在被当做垃圾回收前都应该被签入. ...
- java中finalize()方法
finalize 垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点: 当对象不再被程序所使用的时候,垃圾回收器将会将其回收 垃圾回收是在后台运行的,我们无法命令 ...
- Java中finalize方法的使用(经典白学,新idk已经弃用)
在jdk文档中,其解释为当垃圾回收器确定不存在对该对象的更多的引用时,由对象的垃圾回收器调用此方法. 什么情况下会被回收:某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,用垃圾回收机制调 ...
- Java中finalize方法
前沿:在面试过程中我们可能会被问到final.finally.finalize的区别?本篇文章将介绍finalize的简单用法. Finalize()是Object类的方法. 在GC准备释放对象所占用 ...
- Java中finalize()用法
Java中finalize() 垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Objec ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...
- java中collection方法_Java 8中的Collector toCollection()方法
toCollection()Java中的Collector类的方法返回一个Collector,该Collector以遇到的顺序将输入元素累积到一个新的Collection中. 语法如下static & ...
- java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
[单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...
最新文章
- python八大排序算法 间书_python八大排序算法
- 8.0 C++远征:对象数组
- POJ - 3304 Segments(简单几何)
- 操作系统:第二章 进程管理2 - 处理机调度
- 1058. 选择题(20)
- C语言学习,关于fflush 和setvbuf
- gdb tui的使用
- Python 判断语句 if else
- 蓝屏代码PAGE_FAULT_IN_NONPAGED_AREA的解决方法
- bat 调用class文件_拯救写框架的程序员!用字节码替代反射,实现任意函数调用...
- html gzip解压易语言,易语言GZIP解压缩源码
- 【数学建模】——1992~2019国赛优秀论文
- 爬虫实战(自用)requests模块、聚焦爬虫(数据解析)、selenium模块
- 武汉大学研究生慕课《学术道德与学术规范》
- 手把手教你安装MINIGUI编程环境 (MINIGUI版本3.2.0)
- 【C语言】求最小公倍数三种方法
- 深入理解C#中var关键字的用法
- Ubuntu18.04安装pcl教程以及踩坑记录
- Webassembly 学习3 -- 打造web端的aac 播放器
- 系统进程相关知识(转载)
热门文章
- 流量主制作生成装逼工具微信小程序源码下载支持小程序和公众号制作生成
- mysql建表 float_mysql建表以及列属性
- Pytorch多GPU笔记
- 一次对话让你看清整个虚拟现实行业现状
- 小网吧的电影服务器搭建实例 即软件下载
- Moore型状态机和Mealy状态机
- php跳转404_ThinkPHP设置404跳转页面
- 《猎场》有硬伤!独家揭秘硅谷高管的招募日常
- 4am永远 鼠标按键设置_血手幽灵V8M Max游戏鼠标怎么样?到底值不值得入手?
- 论文阅读《A Re-evaluation of Knowledge Graph Completion Methods》