如果finalize方法为空,jvm是否会将其加入回收列表?
来源:互联网 发布:qt编程快速入门 鲍忠贵 编辑:程序博客网 时间:2024/05/18 03:53
如果一个类重写了object的finalize方法,jvm会将这个类生成的实例加入到Finalizer的链表里,这个大家都比较好理解,目的是为了让jvm去invoke实例的finalize方法。但是如果你重写了object的finalize方法,但是finalize方法是空的,情况又是如何呢,下面我们结合jprofile,简单做一下测试。
写两个类,MyName类只有一个say方法,Test类每隔10s生成10万个MyName的实例。
package test;
public class MyName {
public String say() {
return "hello";
}
}
package test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 10000000; i++) {
if (i % 1000000 == 0) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
MyName a = new MyName();
a.say();
}
System.out.println("end");
}
}
用jprofile运行上面的代码,观察jprofile提供的视图,没有发现内存中有Finalizer的链表数据。
然后我们修改MyName 类,重写object的finalize方法,但方法体为空。
package test;
public class MyName {
@Override
protected void finalize() {
}
public String say() {
return "hello";
}
}
再次测试,发现内存中生成了和MyName实例几乎相同数量的Finalizer实例。
根据上面的例子,我们可以得出结论,虽然object的finalize方法也是空的方法体,但是只要object的子类重写了finalize方法,即使finalize的方法体和父类一样是空的,虚拟机也不会进行优化,依然会将子类生成的实例加入Finalizer链表中,等待被回收。
- 如果finalize方法为空,jvm是否会将其加入回收列表?
- 将map对象转换为json时,如果key的value值是null,将不会将其加入json字符串
- JVM内存回收之finalize()方法
- 检查列表是否为空的最好方法
- Mybatis返回Map时,如果值为空的话,那么key也不会被加入到map中的解决办法
- 判断kindeditor 是否为空,如果为空不提交
- JVM垃圾回收之finalize
- Oracle中判断一个字段的值是否为0,如果为0则将0替换成空
- Java 垃圾回收finalize()方法
- 垃圾回收之finalize()方法
- python3判断字典、列表、元组为空以及字典是否存在某个key的方法
- jmeter从外部文件取值问题,如果文件中的参数值为纯数字形式的,jmeter会默认将其识别成int型数据
- 判断输入的信息是否为空,如果为空,提示信息
- 如果为空值
- 判断字符串是否为空的方法
- 判断字符串是否为空的方法
- 判断是否为空的一些方法
- 判断代理方法是否为空
- 命令行下的Python进度条
- Android蓝牙API之BluetoothAdapter类
- 2010-6-28 Ruby on Rails Webアプリケーションフレームワーク概要
- 正确使用UDP广播(C++代码)
- 当java clob数据长度在1000~2000
- 如果finalize方法为空,jvm是否会将其加入回收列表?
- 判别一个分解的无损连接性
- gridview控件中插入dropdownlist控件,如何找到该行的ID
- Android 2.0上使用蓝牙通信代码片断(服务端、客户端、数据传输)
- 最小函数依赖
- 模式分解、最小函数依赖集
- 保持函数依赖的模式分解
- ShadowMap
- POJ1160 P个邮局N个村庄求最短总距离