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. RAC 安装patch 后启动实例 报错 ORA-00439 feature not enabled- Real Application Clusters 解决方法...
  2. MTU 和 MSS 区别
  3. C++ primer 14章习题答案
  4. MyBatis映射文件1(增删改、insert获取自增主键值)
  5. CURL 模拟post和get请求
  6. git命令出现fatal: unable to access SSL certificate problem: self signed certificate
  7. 「Linux」VMware安装centos7(一)
  8. 在Android Studio 和 Eclipse 的 git 插件操作 代码提交以及代码冲突
  9. 获取ItemsControl中当前item的binding数据
  10. Luogu2602[ZJOI2010] 数字计数
  11. 检查dota2服务器是否在线,dota2服务器ping测试脚本分享
  12. App推广10大营销渠道方法汇总
  13. Linux内核详解与内核优化方案
  14. 接口返回的是一个图片文件而不是url 前端如何显示?
  15. 5e检索服务器信息,5Eplay易玩网服务器出租常见问题解答(FAQ)
  16. 企业邮箱的优势有哪些?使用企业邮箱的好处
  17. 服务器重装系统踩坑总结
  18. 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点
  19. 大文件如何传输,大文件的传输方式有哪些?
  20. win10系统能正常接收qq微信但打不开网页问题解决方法

热门文章

  1. Angular之Error: ExpressionChangedAfterItHasBeenChecked
  2. ubuntu java ide,ubuntu 环境 安装 C++ IDE Eclipse
  3. Springboot注册Filter
  4. hibernate中的一级缓存
  5. Maven 修改默认端口启动web项目
  6. python之print实践
  7. CNN结构基元:纹理结构和纹理基元方程化GLOH、Gabor...(Code)
  8. AI最后--热门游戏引擎(CN地区)
  9. 石头剪刀布php源码,php实现的网页版剪刀石头布游戏示例
  10. 基于Web Services建立Asp与Asp.Net之间Session数据桥的应用研究