一、试图通过 "指向给创建的对象变量赋值为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中释放对象资源的一般操作