标签:tin ·· 本地 net 停止 nal row 回收对象 执行
垃圾回收并不能完全代替析构函数,如果想进行出释放存储空间之外的清理工作,还是得明确的调用某个恰当的Java方法。
无论是垃圾回收还是终结,都不保证一定发生。如果Java虚拟机并未面临内存耗尽时,它是不会浪费时间去执行垃圾回收以回复内存的。
清理_终结处理和垃圾回收
垃圾回收:
Java语言new出来的对象会自己回收,主要要考虑其他语言如c/c++创建出来的对象,要自己手动写相应语言的清理方法进行回收。
Java垃圾回收不等于c++的析构。
Java垃圾回收时间不一定,一般等内存不够系统才会释放。(因为垃圾回收器要占用java虚拟机很大的开销,在后面交给操作系统来清理,能减小开销)
Finalize程序员使用它一般是:是用来检查对象是否没有被调用,没有被使用的对象才可以被回收,类似于打开了一个文件夹,需要检查它是否关闭了,才可以进行回收。
System.gc();可以强制回收。
Java垃圾回收是自适应的,其中工作模式包括:停止-复制、标记-清扫(两种方式根据内存剩余、垃圾多少来由系统自行判断)
停止——复制:停止程序,在新的堆,把对象复制到新的堆。这方法很占内存,而且程序若比较好,这就是做无用功。
标记——清扫:标记那些不存活的对象,遍历完所有对象后,进行删除。
只是照着书记录一点笔记。很菜。
public class TestFinalize {
public static void main(String[] args) {
/*TestFinalize tobj = new TestFinalize();
tobj.Test();*///设置变量,变量在,对象就不会被销毁
new TestFinalize().Test();
System.gc();
}
public void Test() {
ClassA aobj = new ClassA("Tom");
}
}
class ClassA {
String name;
ClassA(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
//为避免出错,还是要调用父类finalize的方法
super.finalize();
//对象被销毁的时间是不确定的,一般看不到下面的输出
//除非使用System.gc();
System.out.println(name+"对象被销毁");
}
}
标签:tin ·· 本地 net 停止 nal row 回收对象 执行
原文地址:http://www.cnblogs.com/breezejin/p/6357678.html