【JVM】GC垃圾回收(二)——对象:你才死了呢!
2018-03-05 21:56
267 查看
【前言】
有人说:人这辈子一共会死三次。第一次是你的心脏停止跳动,那么从生物的角度来说,你死了;第二次是在葬礼上,认识你的人都来祭奠,那么你在社会上的地位就死了;第三次是在最后一个记得你的人死后,那你就真的死了。【正文】
对象也是一样,当对象最后一个引用消失的时候对象就真的要死了。而我们之前的可达性分析的时候,相当于大家已经没有人能打电话找到它了,但是还有人在找-通常我们会宣布他失踪,如果最后实在找不到,我们会宣布他死亡。 JVM对应的在回收一个对象之前,至少会对它进行两次标记。
弱:非必须对象,只能生存到下一次垃圾收集发生之前。无论内存是否足够,都会回收。 (WeakReference)
虚:最弱的引用关系, 完全不会影响其生存时间。 存在的唯一意义在对象呗回收时受到一个系统通知。
【总结】
请珍惜对你的每一次引用, 人存在的意义在于被需要。 如果没有人需要你,你已经死了。
有人说:人这辈子一共会死三次。第一次是你的心脏停止跳动,那么从生物的角度来说,你死了;第二次是在葬礼上,认识你的人都来祭奠,那么你在社会上的地位就死了;第三次是在最后一个记得你的人死后,那你就真的死了。【正文】
对象也是一样,当对象最后一个引用消失的时候对象就真的要死了。而我们之前的可达性分析的时候,相当于大家已经没有人能打电话找到它了,但是还有人在找-通常我们会宣布他失踪,如果最后实在找不到,我们会宣布他死亡。 JVM对应的在回收一个对象之前,至少会对它进行两次标记。
对象第一次被标记后,JVM会对其进行一次筛选, 筛选条件是(是否覆盖finalize()方法,finalize是否已经被调用)未覆盖,或者已调用。JVM都会对其进行回收。
若方法已覆盖,且尚未调用,那么会运行一下finalize方法。对象可在该方法中使其被其他对象调用,这样就会更改被回收的命运。
【附】
当对象最后一个引用消失的时候对象就真的要死了。那么什么是引用呢? 如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这是一个非常明确的定义,但是就像真是的世界永远不可能非黑即白。引用也存在许多不太纯粹的分类:强引用,软引用,弱引用,虚引用。
强:类似“Object obj = new Object()”,这种引用还存在,垃圾收集器永远不会回收掉被引用的对象。软:用来描述一些还有用单并非必须的对象。 对软引用关联着的对象 ,在系统将要发生内存溢出之前,将会把这些对象列进回收范围中进行第二次回收。
弱:非必须对象,只能生存到下一次垃圾收集发生之前。无论内存是否足够,都会回收。 (WeakReference)
虚:最弱的引用关系, 完全不会影响其生存时间。 存在的唯一意义在对象呗回收时受到一个系统通知。
【总结】
请珍惜对你的每一次引用, 人存在的意义在于被需要。 如果没有人需要你,你已经死了。
相关文章推荐
- 【JVM】GC垃圾回收(一)——对象你死了没?
- Java虚拟机笔记(二):GC垃圾回收和对象的引用
- JVMGC——基本垃圾回收算法
- 【JAVA】JVM垃圾回收(GC)原理(转)
- System.gc(),JVM垃圾回收
- Java的JVM GC(Garbage Collection)垃圾回收原理机制及算法
- 【转】图解JVM在内存中申请对象及垃圾回收流程
- 各种垃圾回收器、对象分配内存原则、GC参数
- jvm垃圾收集器回收什么样的对象以及各种引用
- JVM 垃圾回收 Minor gc vs Major gc vs Full gc
- JVM 垃圾回收机制与GC性能调优
- JVM GC垃圾回收机制笔记
- JVM之GC垃圾回收全面解析(一)
- JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- 图解JVM在内存中申请对象及垃圾回收流程
- 从JVM的内存管理角度分析Java的GC垃圾回收机制
- JVM原理(三):垃圾回收机制(GC)
- JVM 垃圾回收 GC
- JVM的GC(垃圾回收机制)
- Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)