欢迎大家来到IT世界,在知识的湖畔探索吧!
当一个对象不可达的时候,并不是马上被回收的。我们这里说下finalize()方法,这个方法被调用,有三种情况:
1.所有对象在被GC的时候会自动调用。比如我们运行System.gc()的时候。
2.在程序退出的时候,为每个对象调用一次finalize()方法。
3.显示的调用finalize方法。
也就是说JVM会保证,如果我要回收你的对象了,我一定会在回收之前调用一次这个对象的finalize方法。可以想象成一个杀手对你说,我也许杀不了你,也许能杀你,但是我保证在杀你之前,会让你许个愿。
需要注意的是,你永远不知道这个方法什么时候会被调用,甚至会不会被调用。正如上文举例的杀手能不能杀什么时候杀一样。因为也许有些对象永远不会被回收,或者还没被回收之前程序就已经结束了。但是如果他被GC,就一定会被调用,且只被调用一次。如果执行第一次GC的时候对象没被回收掉,那么后续再去执行GC的时候,这个对象的finalize也不会被调用了。就像杀手已经让你许过愿了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/84853.html