美文网首页
对象已死吗?

对象已死吗?

作者: _陈陌先生_ | 来源:发表于2016-07-14 21:34 被阅读41次

在Java垃圾回收之前,需要判断对象是不是已经死掉,只有死掉的对象才能被GC回收,那么如何判断一个对象是不是已经死掉了呢?

一. 引用计数法

1. 给对象添加一个引用计数器,每当有一个对象引用它时+1,当引用失效时-1,任何时刻计数器为0的对象就是不可能再被引用的。

2. 实现简单,效率很高,但很难解决对象之间循环引用的问题。

二. 可达性分析

1. 基本思想:通过一系列称为GC Roots的对象作为起始点,从这些点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,此对象不可达。

2. 在Java中可以作为GC Roots的对象包括以下几种:虚拟机栈中引用的对象;方法区中类静态属性引用的对象;方法区中常量引用的对象;本地方法中JNI(Native方法)引用的对象。

三. 引用

1. 引用分为四种:强引用,软引用,弱引用,虚引用,强度逐渐减弱。

2. 强引用就是程序代码中普遍存在的引用。

3. 软引用是用来描述一些还有用但并非必须的对象。

4. 弱引用也是用来描述非必需对象的,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。

5. 虚引用又被称为幽灵引用或者幻影引用。

四. 生存还是死亡

1. 即使在可达性分析中不可达的对象,也并非是非死不可,只是处于缓刑阶段,要真正死亡至少要经历两次标记,这跟finalize有关。

2. finalize函数比较危险,尽量不用。

相关文章

  • 对象已死吗?

    在Java垃圾回收之前,需要判断对象是不是已经死掉,只有死掉的对象才能被GC回收,那么如何判断一个对象是不是已经死...

  • 3.2 对象已死吗

    1.引用计数法 引用计数在cocos2dx里已经比较熟悉了,要注意的一个点就是循环引用的问题,如果有两个对象相互持...

  • 垃圾收集器与内存分配策略

    注意:java垃圾收集器主要关注的是java堆。 3.2 对象已死吗 判断对象是否已死的方法: 1. 引用计数法 ...

  • 对象已死?

    1.概述 Java运行时数据区域中介绍了运行时数据区域的各个部分,其中程序计数器、Java虚拟机栈、本地方法栈随着...

  • 对象已死?

      前言:在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象...

  • JVM 读书笔记(二)之垃圾收集器 & 垃圾收集算法

    一、垃圾收集器判断对象已死的算法 1.对象已死吗? 判断方法有以下两种: 1.引用计数法给对象添加一个引用计数器,...

  • 《深入理解java虚拟机》--垃圾回收算法总结

    垃圾回收指的是回收"已死"的对象,"已死"代表该对象不可能被任何途径使用 判断对象已死的几个算法 1. 引用计数法...

  • 如何判断对象已死

    如何确定对象是“活着”还是已经“死去”? 一、判断对象存活的算法 1、引用计数法(未使用) 判定条件: 给对象添加...

  • 随笔:对象存储已死

    今天看了篇文章,对象存储已死。 存储发展到今天,从结构化存储,到非结构化存储,再到后来的对象存储。 这个中的发展,...

  • 如何判断对象已死?

    在GC机制中,垃圾回收器在对对象进行回收之前,首先要确定哪些对象是存活的,哪些对象又是死去的。 首先给出的方案是引...

网友评论

      本文标题:对象已死吗?

      本文链接:https://www.haomeiwen.com/subject/rwtyjttx.html