JAVA中销毁一个对象的方法

方法一:垃圾回收器程序员

垃圾回收器是Java平台中用的最频繁的一种对象销毁方法。垃圾回收器会全程侦测Java应用程序的运行状况。当反先有些对象成为垃圾时,垃圾回收器就会销毁这些对象,并释放这些对象所占用的内存空间。在这里,程序开发人员须要知道,在哪些状况下垃圾回收器会认为这些对象是垃圾对象。一般状况下,若是发生如下两种状况时,系统会认为这些对象是垃圾对象,须要销毁。安全

一是将一个NULL值赋值给对象。如用户先创建了一个对象str1。对象用完了以后,再利用赋值语句,将NULL值赋值给这个对象str1,即便用 str1=NULL的方式将NULL值赋值给这个对象。此时这个对象与内存中对象的存储地址之间就失去了联系。此时内存中的对象就好像成为了一个无主的对象,就会被垃圾回收器销毁。不过这也有例外。如如今同一个对象有两个名字,分别为str1与str2。此时若只是将NULL值赋值给str1,那么内存的这个对象仍然有一个主人,即str2。此时这个对象还暂时不会被垃圾回收器回收。除非在代码中讲这个对象所关联的全部对象名字都赋值为NULL。此时这个对象才变为无主的对象,才会被垃圾回收器回收。在Java中定义本身的工具库工具

二是对象其超出了做用范围,这个这个对象就被认为是垃圾对象,被被垃圾回收器回收并释放内存。其实对象跟变量同样,其也有做用域。当超过这个做用域的话,跟变量同样,这个对象也就无效了,其余地方不可以再引用这个对象。此时这个对象就是名不副实了。为此垃圾回收器也把这种超过做用范围的对象看成垃圾对象来处理。因此说,若是程序员要让对象中的某些成员变量或者成员方法一直有效的话,就须要采用static关键字,让其在变量销毁时仍然有效,或则仍然能够调用这些成员变量与成员方法。对象

方法二:finalize方法内存

虽说垃圾回收器已是一个比较完善的对象销毁机制,可是其并不可以解决Java语言中全部对象的销毁问题。如Java语言平台中,建立对象主要有两种方式,分别为利用NEW关键字来建立(这是对象建立的主要方式)与不适利用NEW关键字来建立。若是Java语言中某些对象不是利用new关键字为对象在内存中分配一块存储区域,那么这种类型的对象就不可以被垃圾回收站回收。即便在代码中将NULL值赋值给这个对象,仍然不可以被垃圾回收器回收。虽然这种对象比较少,可是毕竟存在。为了解决这类对象的回收与内存释放问题,在Java语言中提供了一个finalize的方法。经过这个方法能够显示的让系统回收这个对象。这是一个Object类的方法。一般状况下,这个方法是被声明为protected。程序开发人员在必要的时候,能够在自定的类中定义这个方法。假设如今程序开发人员定义了这个方法,那么在对象销毁时,垃圾回收器会先采用这个方法来销毁对象。而且在下一次垃圾回收动做发生时,最终释放对象的内存。作用域

可见,采用了finalize 方法,虽然可让这个对象被垃圾回收器回收,可是其原理是不一样的。垃圾回收器是先调用这个方法,而后在下次运行这个垃圾回收做业时再释放其占用的内存。另外须要注意的是,这个方法并不必定会保证发生。也就是说,相对来说,其安全性并无垃圾回收器那么的高。故在实际建立对象时,最好仍是采用new关键字来建立比较安全,也更加的方便。由于在利用New关键字来建立对象时,在代码中不须要加入另外额外的代码。因此从安全性与便利性上来讲,笔者都建议采用 new方法为对象在内存中分配存储区域,而不建议采用其余的方式。在采用垃圾回收器的时候,其会自动检测对象的状态,而不须要程序员告知。其发现对象超出了做业域范围或者对象被重置为空时,其就会被自动销毁并释放对象所占用的内存,这种方式处理起来相对来讲更加的安全与便利。开发

方法三:利用System.gc方法强制启动垃圾回收器变量

垃圾回收器其实自动启动的。也就是说,垃圾回收机制起会自动监测垃圾对象,并在适当的时候启动垃圾回收器来销毁对象,释放内存。可是这个垃圾回收器也会有不合做的时候。也就是说,这个垃圾回收器不受程序代码的控制,其具体执行的时间也会不肯定,从而致使上面的finalize方法没法执行,某些对象没法及时销毁。为此有时候须要利用代码来强制启动垃圾回收器,来销毁对象。原理

笔者平时在给一些学员培训时,每每将这个垃圾回收器比喻成医院里的护士。平时的时候,护士会每隔一段时间来进行查房,看看病人有没有什么问题。不过在必要的时候,病人也能够经过警铃来呼叫护士。如当盐水挂完了就能够要求护士来更换盐水。其实这个护士按期查房就好像是垃圾回收器会根据应用程序的运行状况来定时的或者不定时的启动。而这个警铃就好像是这个System.go方法。在有须要的时候,程序开发人员能够在代码中调用这个方法,来强制让护士来病房,即强制启动这个垃圾回收器。采用这个方法,给程序开发人员多了一种主动权,而不须要被动的等着垃圾回收器的启用。有时候,在代码种类利用这个方法不按期或者按期的强制启动垃圾回收器,对及时销毁垃圾对象可以起到一个辅助与保障做用。垃圾回收

相关文章
相关标签/搜索