小编典典

如果您真的对垃圾收集器的工作方式感兴趣,我可以推荐理查德·琼斯的两本有关垃圾收集的书。链接/参考在这里。这不是专门关于Java垃圾收集的。

(我有一本旧书的副本,而新书在我的购物清单上。)

这是复制收集器如何处理此问题的简单版本。

复制收集器通过将对象从一个空间(“从”空间)复制到另一个空间(“到”空间)来工作。

具体来说,GC从每个GC根开始,在“从”空间内遍历可访问对象的图形。每次找到对节点的引用(在实例字段,静态字段,堆栈框架等中)时,它都会检查该引用指向的对象,以查看其是否已标记为已访问。

如果尚未标记,GC将执行以下操作:

它在起始空间中标记对象。

它将对象复制到目标空间。

它将对象的地址存储到起始空间对象中的空间中。(这就像一个转发地址。)

它递归地访问对象的空间副本的每个参考字段。

其结果是引用到空间对象。

如果该对象已被标记,GC将查找转发地址,并返回该地址。

然后,使用指向to-space中对象的指针来更新GC引用来源的位置(在to-space或某个GC根目录中)。

如果您遵循所有这些方法,那么您将发现GC不需要去寻找所有拥有对给定移动对象的引用的位置。相反,它仅遇到遍历可到达对象的所有位置。当然,GC 确实

必须进行遍历,但是有各种技术可以减少每个GC循环中需要进行的遍历量。

如果您未遵循上述说明,请阅读我推荐的其中一本教科书。他们会比我做得更好。您还将找到有关其他种类的GC如何处理此问题的材料。

虽然Java HotSpot的GC是 所有

这种或那种形式的复制收藏。对于并行和并发收集,事情要比我上面的描述要复杂得多,但是“转发地址”机制对所有它们都是通用的。

(关于HotSpot GC的出版物或其他公共文档并不多,并且现有的大多数材料都假定读者对现代垃圾收集器的工作原理有很好的了解。)

2020-10-20

java中一直gc_如果JVM在执行GC时一直在移动对象,那么它如何解析引用?相关推荐

  1. java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...

    探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...

  2. Java中如何实现数组反转,将数组元素倒过来排列?【含详细解析】

    Java中如何实现数组反转,将数组元素倒过来排列?[含详细解析] 数组元素反转:本来的样子{1,2,3,4,5},反转后{5,4,3,2,1}.要求,不能使用新数组. 分析过程 数组元素反转其实就是对 ...

  3. java 基本类型 不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...

    探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...

  4. Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  5. 面试官:Java中线程是按什么顺序执行的?

    本文分享自华为云社区<[高并发系列]Java中线程到底是按什么顺序执行的?你了解的可能是错误的!>,原文作者:冰 河 . Java中线程的执行顺序可能与你想的不一样!一文解密多线程的执行顺 ...

  6. java中的强行终止线程的执行

    不合理 package com.bjpowernode.java.thread; /* 在java中怎么强行终止一个线程的执行.这种方式存在很大的缺点:容易丢失数据.因为这种方式是直接将线程杀死了,线 ...

  7. Java中创建对象的六个步骤 细分后(new关键字)对象头详细介绍

    要看的懂对象的创建过程,首先你得有对Java虚拟机和Java基础以及JUC很是熟悉, 比如类的加载过程.CAS.多线程.JVM的GC等等 文章目录 一.创建对象的六个步骤: 二.对象头的内部结构 首先 ...

  8. java中创建对象的一般格式是什么_Java零基础快速入门|对象的创建和使用(下)...

    本篇文章主要内容:构造方法Constructor 空指针异常 当实例变量是一个引用 方法调用时参数的传递问题 难点解惑 构造方法Constructor 什么是构造方法?构造方法怎么定义?构造方法怎么调 ...

  9. java中的4种引用以和GC Roots

    https://juejin.im/post/5d06de9d51882559ee6f4212?utm_source=gold_browser_extension 1.首先,四种引用如下: Final ...

最新文章

  1. SQL数据库的数据体系结构
  2. 网易伏羲三项研究入选CVPR:AI感知表情能力将达到人类水平
  3. vue-router(2)
  4. sysfs: cannot create duplicate filename '/class/spi_master/spi1'
  5. display:none和visibility:hidden两者的区别
  6. 如何写一个包含多个事件四则运算的留存SQL ——impala hive
  7. STM32-IO引脚复用-原理和使用
  8. Git学习系列(八)标签的管理及配置别名详解
  9. [转载]for循环的执行顺序
  10. 电子设计从零开始_第二版(1)
  11. python做积分_python曲线积分
  12. python实现杨辉三角的规律_Python实现杨辉三角算法
  13. 关于C51中“大小端存储”问题的详解
  14. java单击按钮实现窗口隐藏
  15. Linux下的Job Control
  16. 计算机控制面板 关机时间,怎么设置电脑的自动关机时间
  17. pygame: libpng warning: iCCP: known incorrect sRGB profile 报错
  18. Vue3生命周期函数的那些事
  19. 房贷利率有无套路?Python解读“等额本金与等额本息”的差异所在
  20. Github Pages + Hugo 搭建个人博客

热门文章

  1. docker php安装gd扩展_Linux安装redis及安装php-redis扩展
  2. 语言 micropython_【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试...
  3. 使用jsp页面查看jvm使用情况
  4. 虚拟机禅道服务器ip,Linux系统(虚拟机)安装禅道
  5. server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...
  6. Ireport的安装及使用
  7. @Async异步功能
  8. Fedora ssh服务,防火墙服务设置
  9. Spark机器学习(7):KMenas算法
  10. 香蕉派 Banana pi BPI-M1+ 双核开源单板计算机. 板载WIFI