垃圾回收器GC(Garbage Collector):
1)、**自动回收机制**:JVM的内存耗尽,不能为新对象分配空间时,一次性回收所有垃圾对象。
2)、**手动回收机制**:使用System.gc(); 通知JVM执行垃圾回收,在GC处于繁忙阶段时,暂不回收。空间阶段时,回收。
java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。
当JVM内存快要耗尽的时候 垃圾回收器才会调用finalize()进行垃圾回收!
一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。
使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。
要给一个类增加收尾(finalizer ),你只要定义finalize ( ) 方法即可。
Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。
垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。
就在对象被释放之前,Java 运行系统调用该对象的finalize( ) 方法。
在 Java 中,当你创建一个对象时,Java 虚拟机(JVM)为该对象分配内存、调用构造函数并开始跟踪你使用的对象。
当你停止使用一个对象(就是说,当没有对该对象有效的引用时),JVM 通过垃圾回收器将该对象标记为释放状态。
当垃圾回收器将要释放一个对象的内存时,它调用该对象的finalize() 方法(如果该对象定义了此方法)。
垃圾回收器以独立的低优先级的方式运行,只有当其他线程挂起等待该内存释放的情况出现时,它才开始运行释放对象的内存。(事实上,你可以调用System.gc() 方法强制垃圾回收器来释放这些对象的内存。)
System.runFinalizersOnExit() 方法并不立即试图启动垃圾回收器。而是当应用程序或 Applet 退出时,它调用每个对象的finalize() 方法。
代码示例如下:
package com.jiabo.yuan.garbageCollection;
public class TestGarbageCollectorFinalize {
/**
* @param args
*/
public static void main(String[] args) {
//实例
User user1 = new User("xiaoming", 1);
User user2 = new User("lisi", 2);
User user3 = new User("zhangsan", 3);
System.out.println(user1.getName());
System.out.println(user2.getName());
System.out.println(user3.getName());
user1 = user2 = user3 = null;
System.gc();//Invoke the Java garbage collector
}
static class User extends Object{
private String name;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name, int id) {
super();
this.name = name;
this.id = id;
System.out.println("User" + id +" Object " + "is created");
}
//该User对象被jvm垃圾回收器回收前执行此方法,释放其占有的资源
protected void finalize() throws Throwable{
//调用基类中的finalize() 方法
super.finalize();
//TODO finalization code here
System.out.println("User Object " + id + "is disposed");
}
}
}
1.finalize:方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在 Object 类中定义的,因此所有的类都继承了它。
子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
Java中所有类都从Object类中继承finalize()方法。
当垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的finalize()方法。
2.finally。异常处理时提供 finally 块来执行任何清除操作。
如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。一般异常处理块需要。
3.final。修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finalize方法是与Java编程中的垃圾回收器有关系。
即:当一个对象变成一个垃圾对象的时候,如果此对象的内存被回收,那么就可以调用系统中定义的finalize方法来完成