<b>java的解除:收尾和垃圾堆积</b>[Java编程]
本文“<b>java的解除:收尾和垃圾堆积</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
程序员都知道“初始化”的重要性,但普通忘掉排除的重要性.毕竟,谁需求来排除一个int呢?但是关于库来说,用完后简单地“释放”一个对象并非老是安全的.当然,Java可用垃圾汇集器回收由不再利用的对象占据的内存.目前考虑一种非常特别且不多见的情形.假定我们的对象分配了一个“特别”内存区域,没有利用new.垃圾汇集器只知道释放那些由new分配的内存,所以不知道若何释放对象的“特别”内存.为办理这个问题,Java供应了一个名为finalize()的办法,可为我们的类定义它.在抱负情形下,它的工作原理应当是这样的:一旦垃圾汇集器预备好释放对象占用的存储空间,它首先调用finalize(),并且只有在下一次垃圾汇集历程中,才会真正回收对象的内存.所以假如利用finalize(),便可以在垃圾汇集期间举行一些重要的排除或打扫工作.
但也是一个潜在的编程陷阱,因为有些程序员(分外是在C++开辟后台的)刚开始大概会错误认为它就是在C++中为“破坏器”(Destructor)利用的finalize()——破坏(排除)一个对象的时刻,必定会调用这个函数.但在这里有必要辨别一下C++和Java的辨别,因为C++的对象必定会被排除(排开编程错误的因素),而Java对象并非必定能作为垃圾被“汇集”去.大概换句话说:
垃圾汇集并不等于“破坏”!
若能时刻紧记这一点,踩到陷阱的大概性就会大大削减.它意味着在我们不再需求一个对象之前,有些行动是必须采纳的,并且必须由自己来采纳这些行动.Java并未供应“破坏器”大概近似的概念,所以必须成立一个原始的办法,用它来举行这种排除.比方,假定在对象成立历程中,它会将自己描绘到屏幕上.假如不从屏幕明确删除它的图象,那么它大概永久都不会被排除.若在finalize()里置入某种删除机制,那么假定对象被当作垃圾收掉了,图象首先会将自身从屏幕上移去.但假如未被收掉,图象就会保存下来.所以要记着的第二个重点是:
我们的对象大概不会当作垃圾被收掉!
有时大概发现一个对象的存储空间永久都不会释放,因为自己的程序永久都接近于用光空间的临界点.若程序履行完毕,并且垃圾汇集器一向都没有释放我们成立的任何对象的存储空间,则随着程序的退出,那些资源会返回给操作系统.这是一件功德情,因为垃圾汇集本身也要损耗一些开销.如永久都不用它,那么永久也不用支出这部份开销.
以上是“<b>java的解除:收尾和垃圾堆积</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |