清理:终结与垃圾回收
1.垃圾回收器只能回收由new产生的对象,如果你使用或产生了非new产生的对象,垃圾回收器是不知道如何把他清理掉的 .这个时候就要使用到finalize(). 【程序编程相关:几个简单常用的算法】 这里要明白这么几点 【推荐阅读:用VS.NET2003制作MSI安装程序】 3.finalize()是不会在对象销毁的时候自动唤起的.假设有一个对象在产生的过程中将自己绘制在屏幕之上.你要是没有手动的把他清理掉,那么他永远会在那里,而如果你将清理屏幕的功能放在finalize()之中,那么当这个对象被垃圾回收器回收之前,他在屏幕上的影象会先被清除 【扩展信息:The Programming Lang】 2.垃圾回收器的运做方式是这样的,当垃圾回收器打算开始释放你的对象所占用的资源时,会先调用finalize(),并且在下一次垃圾回收动作放生的时候才回收该对象所占用的资源,如果使用finalize(),他便会让你得以在垃圾回收的时候执行你自己的清理动作 4.你的对象永远可能都不会被回收,因为你的程序并没有把系统资源占用到需要垃圾回收器出马的状态,你所占用的系统资源会在程序结束运行的时候全部释放,那么你就不用付出垃圾回收器运行的额外系统开支. finalize()存在是为了什么? 要知道,finalize()不是用于一般的清理工作,垃圾回收器回清理那些使用new产生的对象,而那些非常规方法(c/c++原生函数)产生对象才会需要 finalize()来进行清理工作.既然这样,我们就不应该大量的使用finalize(),因为他不是摆放常规清理动作的执行场所. 你必须执行清理动作 那么那里才是正常清理动作的执行场所呢? 在c++中,当对象以stack中创建得时候,那么有一个叫析构的函数会自动的在该对象产生地点所在的大括号范围结束前自动调用,如果这个对象是以new的方式从heap中创建的话,那么就必须调用delete运算符才能清理对象.而java不允许对象从stack中创建,你一定得用new从heap中创建对象才行,但是java并没有delete运算符,而是靠的是垃圾回收器来清理对象,所以,我们可以说,既然java中有了垃圾回收器,也就不需要析构函数.但是垃圾回收器毕竟不是析构函数,他无法代替析构函数的作用.... 下一页