java中Object类的finalize的用法
Object类的finalize的用法:
马克-to-win:java当中有个垃圾回收机制,具体说,就是当一些对象被创建使用之后若不再使用的话{比如(i)对象被置成null.(ii)局部对象(无需置成null)当程序运行到右大括号.(iii)匿名对象刚用完},就会变成垃圾占用空间,JAVA的自动垃圾回收(gc)线程会在适当的时候自动运行,回收内存。马克-to-win: 再具体一点,对象被创建之后,垃圾回收(gc)系统就开始跟踪这个对象的使用情况。垃圾回收系统采用有向图的方式:开始时对象一定是可达的,刚把它置为null时,它也就变成了不可达的了,这时就是所谓的垃圾。垃圾回收系统就会回收这些内存空间。马克-to-win:回收之前,先调用该对象的finalize方法。让其做一些最后的收尾工作。见下例,当p1 = null;时,Java的垃圾回收线程会在适当时间点回收p1对象占据的内存空间。马克-to-win:回 收之前,首先调用p1的finalize()。但是sun公司不保证finalize方法会被及时地自动执行。所以我们加了一句,System.gc ();建议系统回收一下垃圾。gc代表garbage collection(垃圾回收),finalize方法就被执行了。
例2.1.4---
class PersonMark_to_win {
String name;
public PersonMark_to_win(String n) {
name = n;
}
public void finalize() {
System.out.println(name + " 在进行finalize");
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
PersonMark_to_win p1 = new PersonMark_to_win("张三");
PersonMark_to_win p2 = new PersonMark_to_win("李四");
p1 = null;
// p2 = null;
System.gc();
// Thread.sleep(3000);//如果发现gc不执行,就运行一下sleep
}
}
例2.1.4_a
class PersonMark_to_win {
String name;
public PersonMark_to_win(String n) {
name = n;
}
public void finalize() {
System.out.println(name + " 在进行finalize");
}
void test(){
PersonMark_to_win pp1 = new PersonMark_to_win("张三jubu");
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
PersonMark_to_win p1 = new PersonMark_to_win("张三");
PersonMark_to_win p2 = new PersonMark_to_win("李四");
p2.test();
System.gc();
p1 = null;
// p2 = null;
System.gc();
Thread.sleep(3000);//如果发现gc不执行,就运行一下sleep
}
}
更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/101519682