首页 > 代码库 > java 垃圾回收步步深入01----整体印象

java 垃圾回收步步深入01----整体印象

                                             java 垃圾回收步步深入01----整体印象

一.总体概念

1.垃圾收集:不再使用的内存空间应该被回收

2.在C/C++语言中,垃圾回收由程序员负责

3.在Java中,它提供了一种系统级线程跟踪存储空间分配情况,在JVM空闲时,检查并释放可被释放的存储空间。垃圾收集在Java程序运行中是自动收集的,程序员无法干预。

4.垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身

5.System.gc()和Runtime.getRuntime().gc()调用时用于 显式 通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的

二.代码演示

protect void finalize() 来源于Object类
         当垃圾收集器觉得一个内存空间无用时就调用finalize 来回收它。

public static void gc() 来源于System类
        调用垃圾收集器

// 本类演示java的垃圾回收机制。
public class GarbageDemo {
    int index;// 保存对象的索引值。
    static int count = 0;// 记录当前产生了多少个对象。

    public GarbageDemo() {
        count++;
        System.out.println("第" + count + "个对象产生了");
        setIndex(count);
    }

    public void setIndex(int index) {
        this.index = index;
    }

    protected void finalize() {
        System.out.println("第" + index + "个对象被回收了");
    }

    public static void main(String[] args) {
        new GarbageDemo();
        new GarbageDemo();
        new GarbageDemo();
        new GarbageDemo();
        // 产生了四个GarbageDemo对象,因为new 一个对象之后,
        // 没有将这个对象的引用赋值给某一个变量,因此,这些对象
        // 所占用的内存没有被任何的变量所引用,因此这些对象就是一个垃圾了。

        System.gc();// 显示的运行垃圾收集器。没有这一句代码是看不见对象被回收的效果的。
    }
}
输出:

第1个对象产生了
第2个对象产生了
第3个对象产生了
第4个对象产生了
第3个对象被回收了
第4个对象被回收了
第2个对象被回收了
第1个对象被回收了