Java 垃圾回收机制

垃圾回收是Java程序设计汇总内存管理的核心概念。

JVM的内存管理机制被称为垃圾回收机制,它负责自动回收那些无用对象所占用的内存。

 

对象什么时候称为垃圾(强引用)

一个对象创建后被防止在JVM的堆内存中,只有当对象不在被程序中的任何引用变量引用时,他的内存才可能被回收。

当垃圾回收器将要回收无用对象的内存时,先调用该对象的 finalize() 方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的内存。

JVM的垃圾回收操作对程序来说都是透明的。因此程序无法预料某个无用对象的 finalize() 方法何时被释放。

 

finalize() 方法的特点:

垃圾回收器是否会执行该方法,何时执行该方法,都是不确定的。

finalize() 方法有可能使对象复活,使它恢复到可触及状态。

垃圾回收器在执行 finalize() 方法时,如果出现异常,垃圾回收器不会报告异常,程序继续正常运行。

垃圾回收器作为低优先级线程独立运行,在任何时候,程序都无法迫使垃圾回收器立即执行垃圾回收操作。

 

程序中可调用的 System.gc() 或 Runtime 中的 gc() 方法提示垃圾回收器尽快执行垃圾回收操作,但是不能保证调用后垃圾回收器会立即执行垃圾回收。

 

垃圾回收机制可以有效防范动态内存分配中可能发生的两个危险:

因内存垃圾过多而引发的内存耗尽,不恰当的内存释放所造成的内存非法引用。

 

public class GCTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new People();    //匿名对象,用完一次就被回收

        //第一种方法
        System.gc();//提示垃圾回收器尽快回收对象所占用的内存
        
        //第二种方法
//        Runtime r = Runtime.getRuntime();
//        r.gc();//提示垃圾回收器尽快回收对象所占用的内存
    }
}
public class People {
    //属性:成员变量
    public String name;//默认为null
    public char sex;//默认为'\u0000'(空字符)
    public int age;//默认为0
    
    //在Object类中定义的方法,在对象被回收前调用
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("对象被回收");
    }
}

 

posted @ 2017-11-20 09:23  LeeAaron  阅读(280)  评论(0编辑  收藏  举报