1、三色标记法

(1)基本算法:要找出存活对象,根据可达性分析,从GC Roots开始进行遍历访问,可达的则为存活对象。

(2)三色:我们把遍历对象图过程中遇到的对象,按“是否访问过”这个条件标记成以下三种颜色

1)白色:尚未访问过。

2)黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。

3)灰色:本对象已访问过,但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后,会转换为黑色。

(3)假设现在有白、灰、黑三个集合(表示当前对象的颜色),其遍历访问过程为:

1)初始时,所有对象都在 【白色集合】中;

2)将GC Roots 直接引用到的对象 挪到 【灰色集合】中;

3)从灰色集合中获取对象:

a、将本对象 引用到的 其他对象 全部挪到 【灰色集合】中;

b、将本对象 挪到 【黑色集合】里面。

4)重复步骤3,直至【灰色集合】为空时结束。

5)结束后,仍在【白色集合】的对象即为GC Roots 不可达,可以进行回收。

注意:当Stop The World (以下简称 STW)时,对象间的引用 是不会发生变化的,可以轻松完成标记。而当需要支持并发标记时,即标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。

深入理解:https://www.jianshu.com/p/12544c0ad5c1

java 标记_java的标记算法相关推荐

  1. 基于界面的银行家算法java实现_java实现银行家算法(Swing界面)

    java代码实现了银行家算法,界面写的个人认为还是较为细致的,完整的实现了找安全序列等算法功能,可作为参考学习银行家算法. 直接上代码:①界面展示方法: public void ShowFrame() ...

  2. java 有穷自动机_Java实现雪花算法(snowflake)

    本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下: 简单描述 最高位是符号位,始终为0,不可用. 41位的时间序列,精确到毫秒级,41位的长度可以使用69年.时间位还有一 ...

  3. ls算法java实现_Java API之算法 | 学步园

    本节中所描述的多态 排序(Sorting) 排序算法可为一个 List 重新排序,以使它的元素按照某种排序关系成上升式排序.有两种形式的操作被提供.简单形式的操作只采用一个 List 并按照它的元素的 ...

  4. 高斯模糊java代码_Java实现高斯模糊算法处理图像

    高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop.GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次 ...

  5. java雪花_Java实现雪花算法(snowflake)

    本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下: 简单描述 最高位是符号位,始终为0,不可用. 41位的时间序列,精确到毫秒级,41位的长度可以使用69年.时间位还有一 ...

  6. 高斯模糊java代码_Java 实现高斯模糊算法

    接上篇文章<高斯模糊算法的原理>,本文我们借助 java 来实现高斯模糊算法,并使用高斯模糊算法处理实际图片. 高斯模糊就是图像和高斯函数的卷积.等价于傅里叶变换后乘上高斯函数再逆变换回来 ...

  7. java轮盘赌_java人工蜂群算法求解TSP问题

    初始化: 重复以下过程: 将采蜜蜂与蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确定蜜源的花蜜量: 观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜 ...

  8. md5 算法java实现_java实现MD5算法

    import java.security.MessageDigest; /** 加密工具* @author 刘彦青 * **/ public class EncryptUtil { /** MD5加密 ...

  9. java 二分_java二分查找算法

    算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于 ...

最新文章

  1. gzip+chunked页面分段输出,resin gzip trunked无效,页面数据写入自定义buffer
  2. 织梦 mail.class.php,详解织梦模板DEDECMS核心类TypeLink.class.php功能分析
  3. 大话数据结构 17:图的深度优先遍历和广度优先遍历
  4. Java多线程(7)--线程池创建线程
  5. Tensorflow入门神经网络代码框架
  6. c语言闰年的判断条件DS1302,DS1302驱动程序(平年和闰年天数自动调整)
  7. JAVA开发面试常问问题总结3
  8. 如何区分USB接口类型
  9. Webx MVC分析
  10. 在企业中采用知识管理工具的好处
  11. 举个栗子~ Minitab 技巧(1):快速安装和激活 Minitab 统计软件
  12. 计算机科学技术学院迎新晚会主题,我校计算机科学与技术学院举行迎新晚会
  13. echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题
  14. ipad pro pythonista_这 15 个应用 , 程序员用 iPad 照样可以编程 !
  15. wannier拟合能带总是拟合不上_VASP+Wannier90方法拟合单层MoS2的能带,请问如何改善拟合结果?...
  16. 介绍部电影“Sicko”,迈克尔摩尔拍摄的抨击美国医疗体制的纪录片
  17. airflow连接mysql错误_airflow使用MySQL数据库(第三方数据库详解)
  18. 关于ARM Kinetis MCU唤醒源NVIC和AWIC的工作过程解惑
  19. 计算机毕业设计SSM房屋租赁管理系统设计【附源码数据库】
  20. hbase批量入库的总结

热门文章

  1. 文件解析漏洞总结-Apache
  2. 计算机一级应用考试题,办公软件应用计算机一级考试试题
  3. linux的底层文件i o,Linux 文件I/O操作
  4. fusion 360安装程序的多个实例正在同时运行。_阿里架构师实例讲解——Java多线程编程;详细的不能再详细了...
  5. linux查看时间同步服务,Linux系统时钟同步服务NTPD配置方法
  6. echarts y轴数据过长处理
  7. 计算laws的matlab代码
  8. Tensorflow学习笔记:多项式拟合
  9. pycharm不支持svn,是需要svn命令行工具没有安装(for windows)
  10. 晒晒今年淘宝网买的李宁鞋子