对象的销毁与垃圾回收机制

来源:互联网 发布:linux查看所有进程命令 编辑:程序博客网 时间:2024/05/17 00:12

       每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收,在其他语言中需要手动回收废弃的对象,但是java语言拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收物用户的占用内存的资源。


对象被视为垃圾的情况主要包括:


1.对象引用超过其作用范围,则这个对象将被视为垃圾。

2.将对象赋值为null。



       java垃圾回收机制运行原理是:


       java运行环境周期地检测某个实体是否已不再被任何对象所引用,如果发现这样的实体,就释放实体占有的内存。因此,java编程人员不必像C++程序员那样,要时刻自己检查哪些对象应该释放内存。


       没有实体的对象称为空对象。空对象不能使用,即不能让一个空对象去调用方法产生行为。假如程序中使用了空对象,程序在运行时会出现异常:NullPointerException。由于对象是动态地分配实体,所以java的编译器对空对象不做检查。因此,我们应该使用空对象。


       而且垃圾回收器只能回收由new 操作符创建的对象,如果某些对象不是通过new操作符在内存中获取一块内存区域,这种对象可能不被垃圾回收机制所收取。在java语言中提供一个finalize()方法,这个方法是Object类的方法,被声明为protected,用户可以在自己的类中定义这个方法,如果用户在类中定义了finalize()方法,在垃圾回收时应首先调用该方法,并且在下一次垃圾回收动作发生时,才能真正回收对象占用的内存。


(注:垃圾回收或是finalize()方法不保证一定会发生,如java虚拟机面临内存损耗待尽的情形,它是不会执行垃圾回收的。)


由于垃圾回收不受人为控制,具体执行时间也不确定,所以finalize()方法也就无法执行,为此,java提供了System.gc()方法强制启动垃圾回收器。




0 0
原创粉丝点击