您的位置:首页 > 其它

【JVM】GC垃圾回收(二)——对象:你才死了呢!

2018-03-05 21:56 267 查看
【前言】
有人说:人这辈子一共会死三次。第一次是你的心脏停止跳动,那么从生物的角度来说,你死了;第二次是在葬礼上,认识你的人都来祭奠,那么你在社会上的地位就死了;第三次是在最后一个记得你的人死后,那你就真的死了。【正文】       
对象也是一样,当对象最后一个引用消失的时候对象就真的要死了。而我们之前的可达性分析的时候,相当于大家已经没有人能打电话找到它了,但是还有人在找-通常我们会宣布他失踪,如果最后实在找不到,我们会宣布他死亡。 JVM对应的在回收一个对象之前,至少会对它进行两次标记。
对象第一次被标记后,JVM会对其进行一次筛选, 筛选条件是(是否覆盖finalize()方法,finalize是否已经被调用)未覆盖,或者已调用。JVM都会对其进行回收。
若方法已覆盖,且尚未调用,那么会运行一下finalize方法。对象可在该方法中使其被其他对象调用,这样就会更改被回收的命运。
【附】    
当对象最后一个引用消失的时候对象就真的要死了。那么什么是引用呢? 如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这是一个非常明确的定义,但是就像真是的世界永远不可能非黑即白。引用也存在许多不太纯粹的分类:强引用,软引用,弱引用,虚引用。
         强:类似“Object obj = new Object()”,这种引用还存在,垃圾收集器永远不会回收掉被引用的对象。
         软:用来描述一些还有用单并非必须的对象。 对软引用关联着的对象 ,在系统将要发生内存溢出之前,将会把这些对象列进回收范围中进行第二次回收。
         弱:非必须对象,只能生存到下一次垃圾收集发生之前。无论内存是否足够,都会回收。 (WeakReference)
         虚:最弱的引用关系, 完全不会影响其生存时间。 存在的唯一意义在对象呗回收时受到一个系统通知。
【总结】
         请珍惜对你的每一次引用, 人存在的意义在于被需要。 如果没有人需要你,你已经死了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: