(JVM)对JVM三色标记算法的理解-创新互联

对三色标记算法的理解
  • 前提
    • 对JVM对象存活判定
      • 引用计数法
      • 可达性分析
    • 三色标计算法的标记流程
      • 第一次初始标记
      • 第二次标记,
      • 重复标记阶段
      • 扫描完成

10年积累的网站设计制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有无极免费网站建设让你可以放心的选择与我们合作。前提

自从接触java开始就了解到jvm,但是没怎么系统的了解过,所以从今天开始就记录下个人对jvm相关的理解,

对JVM对象存活判定 引用计数法
  1. 引用计数(Reference Count)是一个简单而有效的管理对象生命周期的方式。当我们创建一个新对象的时候,它的引用计数为 1,当有一个新的指针指向这个对象时,我们将其引用计数加 1,当某个指针不再指向这个对象是,我们将其引用计数减 1,当对象的引用计数变为 0 时,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存。由于引用计数简单有效。
  2. 可以发现由这个逻辑来想:
    当两个对象a和对象b ,互相引用对方作为自己的成员变量,成员变量随着对象的创建而存在,随着对象被回收而释放。,也就是说只有在当前变量销毁时,才会对成员变量的引用计数减一, 可以理解为,对象A的销毁依赖着对象B的销毁,对象B的销毁依赖者对象A的销毁,这样就产生了循环引用。即使外部没有指针能够访问他们,但是对象a和b依然不能被释放.
可达性分析
  1. 为了解决这个问题,java使用了可达性分析的方法,通过一系列的“GC Roots” 对象作为起点搜索。
    如果在DC Roots 和一个对象之间没有可达性路行,则称该对象是不可达的,需要注意的是 不可达对象不等价于可回收对象,不可达对象标为可回收对象至少要经历两次标记过程, 两次标记后仍然是可回收对象,则将面临回收

  2. 可作为gc roots的对象有

    1. java虚拟机栈(栈帧的本地变量表)中引用的对象
    2. 本地方法栈中JNI引用对象
    3. 方法区中常量。类静态属性引用的对象
三色标计算法的标记流程

在这里插入图片描述

根据可达性分析算法,从roots开始进行遍历访问。初始状态,所有对象都是白色的,只有GC Roots是黑色的

在这里插入图片描述

第一次初始标记

GC Roots 标记直接关联对象置为灰色
在这里插入图片描述

第二次标记,

初始标记后,进行并发标记,扫描整个引用链。没有子节点的话,将本节点变为黑色,有子节点的话,则将当前节点标为黑色,子节点变为灰色
在这里插入图片描述

重复标记阶段

直至灰色对象没有其他子节点引用时结束。
在这里插入图片描述

扫描完成

此时黑色对象就是存活的对象,白色对象就是已消亡可回收的对象
即(A,D,E,F,G) 可达也就是存活对象,(B,C,H) 不可达可回首的对象

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:(JVM)对JVM三色标记算法的理解-创新互联
网页链接:http://ybzwz.com/article/dgssoo.html