java堆和方法区主要存放各种类型的对象(方法区中也存储一些静态变量和全局常量等信息),那么我们在使用GC对其进行回收的时候首先要考虑的就是如何判断一个对象是否应该被回收。也就是要判断一个对象是否还有其他的引用或关联使得这个对象处于存活的状态。我们需要将不在存活状态的所有对象标记出,以便于GC进行回收。

判断对象是否存活有两种比较常见的方法:引用计数法和可达性分析算法

引用计数法

在java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单地办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。

问题: 如果出现对象的循环引用,那计数永远都不是0,会使得GC永远无法回收这两个对象。

可达性分析算法(java使用的方案)

为了解决引用计数法的循环引用问题,java使用了可达性分析的方法。通过一系列的"GC roots"对象作为起点搜索。如果在"GC roots"和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。

对象是否要被回收(引用计数和可达性分析算法)相关推荐

  1. JVM—引用计数和可达性分析算法(存活性判断)

    1 引用计数算法 1.1 算法思想   给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:   当引用失效时,计数器值就减1:   任何时候计数器为0时的对象就是不能再被使用. 1. ...

  2. 【JVM】引用计数和可达性分析算法详解

    前言 JVM堆中几乎存放了所有对象的实例,那么垃圾收集器怎么确定哪些对象还"存活"着,哪些已经"死去"呢?本文主要介绍判断对象是否存活算法引用计数算法和可达性分 ...

  3. 引用计数器法 可达性分析算法_面试官:你说你熟悉jvm?那你讲一下并发的可达性分析...

    持续输出原创文章,点击蓝字关注我吧 上面这张图是我还是北漂的时候,在鼓楼附近的胡同里面拍的. 那天刚刚下完雨,路过这个地方的时候,一瞬间就被这五颜六色的门板和自行车给吸引了,于是拍下了这张图片.看到这 ...

  4. java gc 对象可达性_JVM垃圾回收系列---GC Roots可达性分析

    JVM的垃圾回收对于Java开发人员来说是比较透明的,本文采用问答的形式进行展开,希望能够解释下垃圾回收的一些问题.那么首先第一个问题 问:什么样的对象会被回收. 答:已经死亡的对象,不可达的对象,肯 ...

  5. 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还"存活"着,哪些对 ...

  6. 深入理解JVM(三)——JVM之判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文转载自https://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Ja ...

  7. python的super super easy教程 | 垃圾回收 引用计数 深拷贝和浅拷贝

    input最好是放在函数外面range(i)表示从0到(i-1)函数的作用:接收一个参数 返回一个参数python的内存管理 (常见的面试题)python的内存机制:以引用计数为主,分代回收,标记清除 ...

  8. 31. 如何计算对象已死(引用计数器算法、可达性分析算法)32.对象是否可 GC?33. Minor GC 和 Full GC

    31. 如何计算对象已死 31.1.引用计数器算法 引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象 ...

  9. JVM——引用计数算法与可达性分析算法

    前几篇博客我们一起认识了JVM的内存模型(程序计数器.虚拟机栈.本地方法栈.方法区与堆),了解了它们的内存结构与分配,同时也略带提到关于内存的回收. JVM--内存模型(一):程序计数器 JVM--内 ...

最新文章

  1. 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪
  2. 阻抗匹配工具_工具 | 9R Fret Polishing Wheels 品丝抛光轮
  3. 全球及中国甲苯二异氰酸酯预聚物行业投资状况与前景建议研究报告2022版
  4. zigbee看门狗综合实验_2.5KW风光互补发电教学实验系统,风能太阳能发电实训装置_搜狐汽车...
  5. 有关Spring注解@xxx的零碎知识
  6. Loadrunner基础:Loadrunner Vuser基本概念和应用
  7. linux 删除mysql_MySQL— Linux下解压包方式安装
  8. 计算机硬件知识竞赛题库,电脑知识竞赛题库.pdf
  9. 底量超顶量超级大黑马指标源码_一旦出现底量超顶量形态,是超级大黑马诞生!...
  10. python---字符编码
  11. sqlbulkcopy能用于mysql吗_混凝土自动上料搅拌车能用于农村盖房吗?
  12. 雷达线雕的原理及功效
  13. Android SoundPool封装
  14. ActiveSync用蓝牙接口PC与WM6同步
  15. Windows实现微信多开
  16. oracle英文怎么转中文,ORACLE英文字符集转中文
  17. java中display中的属性_全面解析display属性
  18. Windows 无线上外网并通过共享让其它电脑用有线连接后也能上外网
  19. Bugku 分析 特殊后门(wireshark流量包分析)
  20. Threats to Validity_追逐梦想的顾咏丰_新浪博客

热门文章

  1. 进制转换(完成Python14作业的背景补充)
  2. NC:电缆细菌减少水稻种植土壤中的甲烷排放
  3. TaxonKit:小巧、高效、实用的NCBI分类学数据命令行工具
  4. NC:应对干旱 细菌崩了 真菌依然很稳(纯网络分析发Nature子刊)
  5. QIIME1.9.1-1虚拟机安装配置及挂载外部目录
  6. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
  7. R可视化ggplot2绘制重叠密度图(Overlay Density Plots)
  8. python代码判断指定日期是当前年的第多少天
  9. 流行学习、流形学习家族、局部线性嵌入LLE、随机投影(Random Projection)、t-SNE降维及可视化
  10. mysql简拼_mysql实现汉字换拼音,及汉字转简拼