保定网站建设报价/无锡seo网络推广

保定网站建设报价,无锡seo网络推广,做电商,做淘宝还是做网站垃圾回收分为两步:1)判定对象是否存活。2)将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法:通过一系列“GC Roots”对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,…

垃圾回收分为两步:1)判定对象是否存活。2)将“消亡”的对象进行内存回收。

1 判定对象存活

可达性分析算法:通过一系列“GC Roots”对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走的路径为“引用链”,如果某个对象到“GC Roots”没有任何引用链相连,则判定该对象“消亡”。

强引用

正常引用,可达性分析搜索的只有强引用

软引用

关联还有用,但非必须的对象。在系统将要发生内存溢出时,会把这些对象列入回收范围。

弱引用

比软引用更弱,只能生存到下次垃圾收集发生之前。

虚引用

最弱,无法通过虚引用来取得一个对象实例。唯一作用是在则会个对象被回收时收到一个系统通知。

表 Java 的引用类型

1.1 三色标记

图 可达性分析算法“三色标记”演示过程

1.1.1“对象消失”

垃圾回收器与用户线程并发执行,若以下两个条件同时成立,对象消失必然发生。

  1. 用户线程将黑色对象指向一个白色对象。
  2. 用户删除所有从灰色对象到该白色对象的引用。

注意:对于在并发期间新建的对象,JVM会把其标记为黑色或灰色。

1.1.2 写屏障

写屏障是一段嵌入在对象引用赋值操作中的代码逻辑(类似AOP)。JVM通过写屏障实现两种方式来解决上面“对象消失”的问题。

增量更新

破坏第1个条件。当黑色对象插入新指向到白色对象时,写屏障将新插入引用记录下来,等并发扫描结束,再将记录过的引用关系中黑色对象集作为根,重新扫描一次。

效率更低。

原始快照

破坏第2个条件。当灰色对象要删除指向白色对象的引用关系时,写屏障将要删除的引用关系记录下来,等并发扫描结束,再将记录过的引用关系中白色对象集作为根,重新扫描一次。

会产生浮动垃圾。

表 “对象消失”的解决方案

1.2 GC Roots 对象

主要有:1) 栈中引用的对象。2)本地方法栈中引用的对象。3)方法区中静态属性引用的对象及常量引用的对象。4)JVM 内部的引用。5)被同步锁持有的对象等。

获取GC Roots 集必须在一个能保障一致性的快照中才能进行,因此需要STW(Stop The Word)。

1.2.1 栈帧

栈帧是单个线程在方法调用时在栈中分配的内存区域,用于存储方法的执行状态。每个方法从调用到执行完成,对应一个栈帧的入栈和出栈。

图 栈帧内存布局

局部变量表

存储方法的参数、局部变量以及部分中间结果。

以变量槽(Slot)为基本单位,每个Slot占用4个字节。对于8个字节的变量,占用两个连续的Slot。

索引分配:

非静态方法第0位Slot存储this引用。

方法参数从第1位依次存储。

局部变量按声明顺序分配Slot。

操作数栈

存储方法执行过程中的操作数。

动态链接

存储指向运行时常量池中该方法的符号引用。

方法返回地址

存储方法退出后需要返回到的调用者位置。

附加信息

行号表、局部变量表描述符等。

表 栈帧内存组成

1.2.2 OopMap

收集线程需要遍历方法栈中每一个栈帧,来收集被引用的变量。如果对栈帧的局部变量表进行全表扫描,很耗时。

OopMap(ordinary object pointer Map)普通对象地图,用于描述栈帧中对象引用的位置。它通常是一个位图,每个位对应局部变量表中一个槽位。1表示该槽位有对象引用,0表示没有。例如,假设局部变量表一共有8个槽位,其中只有第1个及第3个槽位有对象引用,则OopMap表示为10100000。

一个栈帧包含多个OopMap。

1.2.3 安全点

引发引用关系变化的指令很多,无法为每一条指令都生成对应的OopMap,只会在某些位置生成,这些位置被称为安全点。

安全点选择的原则:平衡线程响应速度和性能开销。

安全点常用位置:方法调用、循环末尾、异常处理路径等。

主动式中断

主流方案,当需要GC Roots收集时,JVM在内存中设置一个标识位,用户线程每次到达安全点都会轮询标识位,如果需要中断,则主动挂起。

被动式中断

通过操作系统信号强制中断线程,如果有用户线程未到达安全点,则恢复该线程,让其到达安全点后再中断。

表 安全点的实现方案

缺陷:

1)本地方法无法设置安全点。

2)对于未插入安全点但需要长时间执行的指令(如循环),如果在循环提中未插入安全点,则需要等待循环完成才能到达安全点。

3)如果线程在安全点被阻塞或sleep,因为其被唤醒的时间不能确定,JVM无法等到该线程到达安全点。

4)如果为线程阻塞或sleep指定插入安全点,则需要插入安全点的地方会增加,会加重程序的负担。

1.2.5 安全区域

在某段代码片段中,引用关系不会发生变化,这个区域任何地方开始收集GC Roots都是安全的,这个区域称为安全区域。

当用户线程执行到安全区域时,会标识自己已进入安全区域。这段时间里JVM要进行GC Roots收集就可不必中断在安全区域内的线程,当线程要离开安全区域时,会先检测JVM是否完成了GC Roots枚举,如果完成,则线程继续执行,否则等待。

安全区域的应用场景:

  1. 本地代码的执行,当用户线程进入本地方法时就标识自己进入了安全区域。
  2. 统一管理线程多种阻塞状态,只有线程处于阻塞状态,即视为进入安全区域。
  3. 避免“长时间无安全点”的僵局,如在循环体中没有安全点,则标识为进入了安全区域。

安全区域是对安全点的必要补充。

1.3 对象回收判定

要正式宣告对象死亡,最少要经历两次标记过程:

  1. 可达性分析后进行第1次标记。
  2. 对上面标记的对象进行筛选,如果这些对象实现了finalize()方法,则会调用这个方法,这是对象唯一次复活的机会,否则宣告对象死亡。

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

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

相关文章

国产开发板—米尔全志T113-i如何实现ARM+RISC-V+DSP协同计算?

近年来,随着半导体产业的快速发展和技术的不断迭代,物联网设备种类繁多(如智能家居、工业传感器),对算力、功耗、实时性要求差异大,单一架构无法满足所有需求。因此米尔推出MYD-YT113i开发板(基…

Tomcat虚拟主机配置详解:Centos环境下多域名部署(详细教程!)

🏡作者主页:点击! Tomcat服务器📝专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年3月18日14点14分 最近在折腾 Tomcat 的时候&…

dfs刷题排列问题 + 子集问题 + 组和问题总结

文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…

【Linux】VMware17 安装 Ubuntu24.04 虚拟机

目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址:ubuntu-24.04.2-des…

CVPR2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~

汇总结果来源:CVPR 2025 Accepted Papers 若文中出现的 论文链接 和 GitHub链接 点不开,则说明还未公布,在公布后笔者会及时添加. 若笔者未及时添加,欢迎读者告知. 文章根据题目关键词搜索,可能会有遗漏. 若笔者出现…

PostgreSQL_数据回退,数据库导出、导入

目录 前置: 1 数据回退 1.1 代码 1.2 pgAdmin4 中查看 1)t_daily 2) t_stock_daily 2 数据库导出、导入 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文。 1 数据回退 上一节“PostgreSQL_数据下载并…

golang单机锁实现

1、锁的概念引入 首先,为什么需要锁? 在并发编程中,多个线程或进程可能同时访问和修改同一个共享资源(例如变量、数据结构、文件)等,若不引入合适的同步机制,会引发以下问题: 数据竞…

【HarmonyOS Next】鸿蒙应用实现弹框DialogHub详解

【HarmonyOS Next】鸿蒙应用实现弹框DialogHub详解 一、前言 鸿蒙中实现弹框目前官方提供openCustomDialog和CustomDialog两种模式。推荐前者,详情见下图和官网文档链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-u…

机器学习算法实战——天气数据分析(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 天气数据分析是气象学和数据科学交叉领域的一个重要研究方向。随着大数据技术的发展,气象数据的采集、存储和分…

炫酷的3D按钮效果实现 - CSS3高级特性应用

炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…

解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题

配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下,ConfigParser会将ini配置文件中的KEY,转为小写。 重载后配置类: 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…

微服务的网关配置

微服务的网关配置 1. 网关路由 1.1 网关 1.1.1 存在问题 单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:每个微服务都需要编写身…

区间震荡指标

区间震荡指标的逻辑如下: 一、函数注解 1. Summation函数 功能: 计算给定价格序列Price的前Length个数据点的和,或在数据点数量超过Length时,计算滚动窗口内的价格和。 参数: Price(1):价格序列&#…

C语言-数组指针和指针数组

指针 数组指针与指针数组 数组指针 定义 概念:数组指针是指向数组的指针,本质上还是指针 特点: ①先有数组,后有指针 ②它指向的是一个完整的数组 一维数组指针 语法: 数据类型 (*指针变量名)[容量]; 案例&a…

31天Python入门——第5天:循环那些事儿

你好,我是安然无虞。 文章目录 1. while循环1.1 while循环的嵌套1.2 补充学习:print函数 2. for循环2.1 range函数2.2 for循环2.3 continue和break以及return2.4 for循环的嵌套 3. 补充学习3.1 enumerate函数3.2 zip函数3.3 不要在遍历列表的过程中删除元素 循环 是…

c#难点整理

1.何为托管代码,何为非托管代码 托管代码就是.net框架下的代码 非托管代码,就是非.net框架下的代码 2.委托的关键知识点 将方法作为参数进行传递 3.多维数组 4.锯齿数组 5.多播委托的使用 6.is运算符 相当于逻辑运算符是 7.as 起到转换的作用 8.可…

数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)

对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。 栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方: 1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的&#xf…

Jmeter旧版本如何下载

1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1

css-grid布局

文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局,不过g…

SolidWorks使用显卡教程

操作步骤: 打开注册表编辑器 按下键盘上的 Win R 组合键,输入 regedit 并按回车键,打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径: plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…