Java虚拟机——HotSpot的算法实现细节

news2024/9/21 20:32:56

根节点枚举

  • 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。
  • 固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(栈帧的本地变量表)中。
  • 当Java应用很大的时候,类和常量数量很多,逐个检查会消耗大量时间。
    所有收集器在根节点枚举上都需要暂停用户线程
    请添加图片描述

安全点

  • 如果为每一条指令都生成对应的OopMap,那么会需要大量的额外空间。
  • 它只在特定的位置记录这些信息,这些位置称为安全点
    请添加图片描述

安全区域

  • 安全点的设计完美解决了如何停顿用户线程,让虚拟机进入垃圾回收状态。
  • 但是程序不执行的时候,安全点就没有作用。
  • 典型场景:用户线程处于Sleep状态或者是Blocked状态。 这个时候线程无法响应虚拟机的中断请求,不能再走到安全点去中断挂起自己。 这个时候就需要安全区域来解决。
    在这里插入图片描述

记忆集与卡表

  • 在分代收集理论中,提到为了解决对象跨代引用的问题,垃圾收集器在新生代中建立了名为记忆集的数据结构。
  • 记忆集 是一种用于记录从非收集区域 指向收集区域 的指针集合的抽象数据结构。
    在这里插入图片描述

写屏障

  • 使用记忆集可以缩减GC Roots扫描范围。
  • 但是没有解决卡表中的元素如何维护。 也就是它们如何变脏,谁来把它们变脏。
  • HotSpot通过写屏障来维护卡表状态,可以帮助Java虚拟机跟踪对象引用的变化
    在这里插入图片描述

并发的可达性分析

  • 可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析 , 这意味着必须全称冻结用户线程的运行。
  • GC Roots在继续往下遍历对象图,这一步的停顿时间必定会与 Java堆容量成正比例关系。
  • 堆越大,存储的对象越多,对象图结构越复杂,要标记更多对象而产生的停顿时间自然就更长。
  • 所以我们要解决或者降低用户线程的停顿!
    在这里插入图片描述
  • 以上无论是对引用关系记录 的插入还是删除 , 虚拟机的记录操作都是通过写屏障实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串;3.4.2 双端队列 (链表) list :有序(插入有序);3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中,首先看到的是dubbo的集群容错模式,以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义,就是可用性优先,遍历所有的invokers,选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行,攻击者通常会控制网络中许多终端或服务器,这些终端或服务器同时向被攻击目标发送大量的请求,被攻击目标无法判断这些请求来源的合法性,因此会无法正常处理这些请求,而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee(蒂姆伯纳斯李) (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符(器&am…

Fiddler如何比较两个接口请求?

进行APP测试时,往往会出现Android和iOS端同一请求,但执行结果不同,这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…

【计网】第一章 计算机网络概述

文章目录 计算机网络概述一、计算机网络在信息时代中的作用二、互联网概述2.1 互连网概念2.2 网络的网络2.3 互连网基础结构发展的三个阶段2.4 互连网的标准化工作 三、互联网的组成3.1 互联网的边缘部分3.2 互联网的核心部分3.2.1 基础概念3.2.2 电路交换3.2.3 报文交换3.2.4 …

全网最全的以太坊ERC4626协议解析-ERC4626 - yield-bearing vaults

收益性存款 ERC4626 协议是一种用于代币化保险库的标准,它可以优化和统一收益保险库的技术参数。收益保险库是指使用不同策略来为用户提供最佳收益的合约,例如借贷市场、聚合器或本身具有利息的代币。ERC4626 协议提供了一个标准的 API,用于表…

html实现好看的个人介绍,个人主页模板5(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的介绍界面1.3 我的能力界面1.4 项目案例界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.3 源代码目录 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/13127331…

DJ4-4 CIDR、DHCP

目录 一、分类 IP 方法的问题 二、CIDR 1、CIDR 定义 2、CIDR 地址划分 三、DHCP 1、DHCP 概述 2、DHCP 工作过程 3、DHCP:C/S 场景 4、DHCP:不仅获得 IP 地址 四、组织机构获取 IP 地址 一、分类 IP 方法的问题 A 类的 IP 地址,有…

一天学完Java,主要记录difference

Java学习记录 Java中的内存区域划分Java中的包(package)Java中的枚举(Enum)Java中的包装类Java中的Math数学计算类Java中的Random&UUIDJava中的format数字格式化Java中字符串和数字的转换Java中的高精度计算Java中的String操作…

安装Ubuntu系统详细教程

一. 前言 本篇文章详解介绍一下如何安装Ubuntu系统,笔者在安装的过程中踩过很多坑,重装了很多次,现在把安装过程中遇到的问题也列出来,供大家参考。 二. 准备工作 这个环节很重要,工欲善其事,必先利其器。 …

数据结构--》从数据结构开始,打好算法基础

目录 数据结构的基本概念 数据结构的三要素 算法的基本概念 数据结构的基本概念 在学习某个知识之前,我们是否都有问过自己我们到底在学习的目的是什么?学习数据结构也一样,我们学习数据结构主要是为了用程序把现实世界的问题信息化&#…

银行项目软件测试中都测哪些内容呢?

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试?在这些测试的内容中如何去更好的掌握测试技能保证测试质量,一起来学习探讨交流。 如果你想拿到性能项目,可以进一下这个群:798478386 下面为银行测试点的概括&am…

php个人简历模板

php个人简历模板一 目前所在: 广州 年 龄: 31 户口所在: 汕头 国 籍: 中国 婚姻状况: 已婚 民 族: 汉族 身 高: 175 cm 体 重: 求职意向 人才类型: 普通求职 应聘职…

软件工程——第1章软件工程学概述知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.为什么要有软件工程这门学科? 2.软件分为哪些阶段? 3.软件危机的定义? 4.软件危机包含的问题有哪些&#xff…

Unity UGUI4——组合控件

一、Button ​ Button 是按钮组件,是 UGUI 中用于处理玩家按钮相关交互的关键组件 ​ 默认创建的 Button由 2 个对象组成 ​ 父对象——Button 组件依附对象,同时挂载了一个 Image 组件作为按钮背景图 ​ 子对象——按钮文本 Text(可选&…

【探索 Kubernetes|作业管理篇 系列 11】控制器核心功能

前言 大家好,我是秋意零。 上一篇结束了 Pod 对象的内容。 今天要探讨的内容是 “控制器”,它是 Kubernetes 编排最核心的功能。理解了 “控制器”,你就能理解 Deployment、StatefulSet、DaemontSet、Job、CroJob 控制器对象。 最近搞了一…

Windows 安装 Podman Desktop

Windows 安装 Podman Desktop podman 简介概述和范围Roadmap 路线图Rootless 无根 podman 安装说明Podman for Windows前置条件安装 podman自动 WSL 安装机器初始化过程启动 machine Rootful & Rootless安装 podman desktop podman 命令介绍podman -hpodman machine -h 参考…