浅层了解Java垃圾回收机制——Java面向对象基础(3)

一、试图通过 "指向给创建的对象变量赋值为NULL" 来实现释放资源

public class Cat {
    String catName;
    public void catSay(){
        System.out.println(catName+"喵喵喵");
    }
}
public class my_main {

    public static void main(String[] args) {
        Cat cat=new Cat();//对象实例化
        
        cat=null;//指向null
        
        cat.catName="小花";//再赋值
        System.out.println(cat.catName);//报错,空指针异常
    }
}

  结果:

    图片解析:

  分析:此例中,如图实际上创建的new Cat()空间并没有马上消失,cat中原本储存的地址xfff000变为null,因此如果使用属性会产生空指针异常

 

二、试图通过 "调用System.gc()" 来释放资源

public class my_main {

    public static void main(String[] args) {
        Cat cat=new Cat();//对象实例化
        cat.catName="小花";//再赋值

        System.gc();//呼叫垃圾收集器,提高被回收的几率。
        
        System.out.println(cat.catName);
    }
}

  结果:

   1.可以看到最终结果,任然能够输出创建对象的属性值。jvm中提供了自动垃圾回收功能,其方式采用轮询的方式进行。

   2.System.gc();//呼叫垃圾收集器,提高被回收的几率。但仅仅是提高被回收几率,并不能正真立即回收。何时被回收是无法确定的。

 

三、Java中释放对象资源的一般操作

 

posted @ 2020-03-11 15:12  Unlimited_Rain  阅读(217)  评论(0编辑  收藏  举报