JVM安全点详解

2023-10-31

1、安全点是什么?

在虚拟机在进行可达性分析时,HotSpot虚拟机会在特定的位置记录在哪有引用,这些特定的位置就叫做安全点。

2、安全点的作用是什么?

上边已经说过了,在Oomap的帮助下,HotSpot虚拟机很快就完成了GC Roots枚举,但是我们不可能给每一个指令都声成对应的OoMap,那样会造成大量的内存浪费,安全点的作用就是来表示程序执行到安全点时,可以看作冻结状态,因此安全点选定的既不能太少,导致GC等待时间变长,也不能太多,造成系统的负荷。但是大部分的指令执行都很快,程序长时间执行最显著的特征就是“指令复用”,例如循环。

3、如何实现在GC发生时使线程在安全点进入冻结状态?

有两种方案:抢先式中断、主动式中断

抢先式中断:抢先式中断指的是在GC发生时,现将所有线程都中断,然后再检查没有到安全点的线程恢复执行到安全点。

主动式中断:主动式中断指的是在GC需要中断线程时,不直接操作线程,只是置一个标志,让所有线程去轮询这个标识为,当标志为真时则自己中断挂起,轮训标志的地方和安全点是重合的,另外再加上创建对象所需要分配内存的地方。

4、安全区域

上边的safepoint看似已经完美的解决了,GC时如何处理线程的问题,但是如果说线程处于Sleep或者Block状态呢,他是不能响应中断的,因此无法完成走到安全点挂起这一操作,因此安全区域的概念出来了,即在该区域内任何位置开始GC都是可以的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM安全点详解 的相关文章

  • Cassandra DB 中的日期插入:重要的 1 小时轮班问题(后续)

    这是这个的后续其他原帖 https stackoverflow com questions 23080188 date insertion in cassandra db non trivial 1h shift issue 2308355
  • Jprofile可以连接到docker中运行的JVM

    我是 JProfiler 的新手 我最近遇到了一个问题 我的Java应用程序在docker中运行 这意味着JVM在docker中运行 但我的jprofile安装在主机上 我知道 jprofiler 必须连接到 JVM 那么 jprofile
  • STS 无法在我的计算机上启动

    我试图在 eclipse 上设置 Spring mvc 项目 基本项目进展顺利 但是使用 Restful 服务 Jersey 等开始出现许多与依赖项相关的错误 所以我打算转到STS 我正在使用 STS 2 9 2 它给我 无法创建java虚
  • 非活动状态下的 Spring Boot 堆使用情况

    我在本地部署了一个非常简单的 spring boot 应用程序 它只有一个类 控制器 差不多就这样了 我注意到堆分配并不稳定 并且有峰值和突然下降 为什么会这样 我没有对应用程序进行过一次调用 A view from VisualVM 事实
  • 在 HP Load Runner 的 VuGen 中加载 javai.dll 时出现错误

    当我尝试在 HP load runner 的 VuGen 中编译一个简单的脚本时 无法启动 JVM 并出现以下错误 Java VM Internal Error Getting Error Loading javai dll 我在用着 HP
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • 在正在运行的 JVM 中查找正在运行的实例

    我想知道是否可以获取给定类的正在运行的实例的句柄 触发此问题的特定问题是应用程序由于存在大量正在运行的线程而无法正常退出 是的 我知道您可以对 thead 进行守护进程 然后它们就不会阻止应用程序退出 但这确实让我想知道这是否可能 我能做的
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • JVM内存段分配

    好吧 我有一个关于 JVM 内存段的问题 我知道每个 JVM 都会选择稍微不同地实现这一点 但这是一个总体概念 在所有 JVM 中应该保持相同 一个在运行时不使用虚拟机执行的标准C C 程序在运行时有四个内存段 代码 堆栈 堆 数据 所有这
  • 如何在Java中计算对象的数字年龄[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道Java中对象的年龄 当我们使用new关键字时 Java中用户定义的对象被创建 但是什么时候它会被销毁 是跨越JVM的perm
  • Java:为什么它使用固定数量的内存?或者它如何管理内存?

    JVM 似乎使用了一些固定数量的内存 至少我经常看到参数 Xmx 对于最大尺寸 和 Xms 对于初始大小 这表明 我感觉 Java 应用程序不能很好地处理内存 我注意到一些事情 即使一些非常小的示例演示应用程序也会加载大量内存 也许这是因为
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • Scala 为了在 JVM 上运行做出了哪些妥协?

    Scala 是一种很棒的语言 但我想知道如果它有自己的运行时 如何改进 IE 由于 JVM 的选择 做出了哪些设计选择 我所知道的两个最重要的妥协是 类型擦除 http java sun com docs books tutorial ja
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • Java中的整数缓存[重复]

    这个问题在这里已经有答案了 可能的重复 奇怪的Java拳击 https stackoverflow com questions 3130311 weird java boxing 最近我看到一个演示 其中有以下 Java 代码示例 Inte
  • Android java.exe 以非零退出值 1 结束 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试过查看类似的解决方案 但没有解决方案有效 我以前运行应用程序没有问题 但我的新应用程序突然开始给我带来问题 当我尝试运行它时总是
  • 如何在没有 Node.JS 的情况下运行 UglifyJS2

    无论如何都要跑UglifyJS2 https github com mishoo UglifyJS2没有node js 假设我想使用 JavaScript 脚本引擎在 JVM 进程中运行它 怎么做 我看到米秀回答你了https github
  • 如何制作.Net或JVM语言?

    我看到了 NET 和 JVM 的所有这些新语言 一个人如何开始制作一个 我找不到关于 JVM 或 MSIL 规范的任何好的文档 Edit 我已经知道如何解析 我更感兴趣的是如何有这么多人基于这些平台创建新语言 你有点幸运 为 NET 开发的
  • 是什么让热部署成为“难题”?

    在工作中 我们经常遇到这样的问题 永久代内存不足 http www jroller com agileanswers entry preventing java s java lang例外 团队负责人认为这是 JVM 中的一个错误 与代码的
  • Dart/Flutter 如何编译到 Android?

    我找不到任何具体的资源 Dart 是否被编译到 JVM 或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行 然后在 JVM 内的 Dart VM 中运行 Dart 前者更有意义 并且符合 无桥 的口号 但后者似乎更符

随机推荐

  • NVIDIA显示下载Java_大佬们!我的NVIDIA Geforce Experience 一直下载更新怎么办?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 官方给的方法试了下 成功了 The installer package of the NVIDIA GeForce Experience Quadro Experience applicatio
  • Qt下实现欧姆龙PLC 串口发送HOSTLINK(FINS)模式

    文章目录 前言 一 HOSTLINK协议说明 二 校验码 FCS 计算 三 示例完整代码 四 下载链接 总结 前言 本文讲述了Qt下模拟串口调试工具发送HOSTLINK FINS 模式 主要进行了HR保持区的字和位的读写 对HOSTLINK
  • nvm的安装及全局依赖配置(详细)

    前言 刚开始只是要下载了cnpm的全局依赖 npm install g cnpm registry http registry npmmirror com 但是报错了 然后开始一系列的尝试 1 更改node global和node cach
  • C++数据结构X篇_01_数据结构的基本概念

    从本篇开始学习数据结构相关概念 数据结构的基本概念 1 数据结构的相关概念 1 1 为什么要学习数据结构 1 2 数据结构中的基本概念 2 算法 2 1 算法的概念 2 2 算法和数据结构的区别 2 3 算法特性 2 4 算法效率的度量 2
  • Python实现时序图

    Python实现时序图 时序图是一种展示程序执行过程 调用流程等的流程图 Python语言作为一种通用编程语言 同样可以用于绘制时序图 本文将介绍如何使用Python实现时序图 在Python中 我们可以使用matplotlib库来绘制时序
  • 基于树莓派的智能家居开发项目总结

    目录 一 项目简单总结下 二 代码实现 1 主函数mainPro c 2 控制设备的头文件inputCommand h 3 外接设备的头文件controlDevices h 4 服务器sockeContrl c 5 语音模块voiceCon
  • 启动项详解

    启动项详解 启动项目就是开机的时候系统会在前台或者后台运行的程序 当Windows 操作系统 完成登录过程 进程表中出现了很多的进程 Windows在启动的时候 自动加载了很多程序 许多程序的自启动 给我们带来了很多方便 这是不争的事实 但
  • 使用Python的imap和email模块读取邮件

    SMTP发送邮件的博文很多 但完整读取邮件的较少 本文主要是Python3读取邮件的编码 同时使用BeautifulSoup解析邮件内容 Python版本信息 如下 Python 3 8 2 tags v3 8 2 7b3ab59 Feb
  • 分支-20. 计算符号函数的值(10)

    对于任一整数n 符号函数sign n 的定义如下 请编写程序计算该函数对任一输入整数的值 输入格式 输入在一行中给出整数n 输出格式 在一行中按照格式 sign n 函数值 输出该整数n对应的函数值 输入样例 1 10 输出样例 1 sig
  • C++学习路线---加油呀

    转载自 编程剑谱公众号 1 C 基础 C 是面向对象的语言 一定要理解清楚面向对象的思想 先把 C 的基础知识点打牢 刚从面向过程中转变过来 一定一定要适应面向对象的写法 在学习面向对象的时候 也要考虑如何用面向过程去实现面向对象 其实也就
  • Xpath的使用

    个人简介 作者简介 大家好 我是W chuanqi 一个编程爱好者 个人主页 W chaunqi 支持我 点赞 收藏 留言 愿你我共勉 若身在泥潭 心也在泥潭 则满眼望去均是泥潭 若身在泥潭 而心系鲲鹏 则能见九万里天地 文章目录 XPat
  • 【软件测试】大厂测工都是这样学习的,你get到了吗?

    有不少的软件测试工程师站在 十字路口 迷茫 无助 找不到自己的方向 一切的迷茫都是因为想得太多而做的太少 每位软件测试行业从业者都能意识到目前自己面临的窘境 但能及时作出改变 顺应时代变化的人还是太少 多数人明明 泰山崩于前而面色如土 却只
  • 【番杰的小技巧笔记】如何通过嘉立创免费打印立创EDA设计的PCB

    引言 嘉立创从今年 2022 八月开始 就不能免费打印其他软件设计的PCB 一次消费20以上可以 所以我来说下如何在嘉立创上免费打印立创EDA设计的PCB 1 下单步骤 1 1 下载 嘉立创下单小助手 想要免费打印 就得先下载 嘉立创下单小
  • xps数据怎么导出为txt_如何处理XPS原始数据

    盼了好久 终于盼来了XPS的分峰拟合教程 拿到XPS的实验结果 首先我们要会看XPS高分辨谱原始数据 XPS高分辨谱的原始数据一般为 xls 文件 打开该文件 我们可以看到各种特定元素的高分辨谱及对它们进行半定量分析的原始数据 如下图 记住
  • 数据结构——线性表

    目录 2 1线性表的定义和特点 2 2案例引入 2 3线性的类型定义 基本操作 一 基本操作 二 基本操作 三 基本操作 四 基本操作 五 2 4线性表的顺序表示和实现 线性表的顺序存储结构占用一片连续的存储空间 顺序表中元素存储位置的计算
  • 微服务容器化实践——微服务设计拆分方法论

    文章目录 微服务设计原则 垂直划分优先原则 持续演进原则 服务自治 接口隔离原则 自动化驱动原则 微服务划分方法 基于数据驱动划分服务 基于领域驱动划分服务 从已有单体架构中逐步划分服务 就像很难用一个绝对的方式去判断架构的好坏一样 在大多
  • IDEA配置方法注释

    IDEA类和方法注释模板设置 非常详细 百度文库 一 设置类的注释模板 1 选择File Settings Editor File and Code Templates Files Class 可以看到创建Class时引入了一个参数 Fil
  • 微信授权网页扫码登录php,PHP实现微信开放平台扫码登录源码

    1 首先到微信开放平台申请https open weixin qq com 获取到appid和APPSECRET 前台显示页面如下html gt var obj new WxLogin id login container appid wx
  • 基于javaweb的音乐网站

    Springboot springmvc mybatis 数据库mysql 开发工具不限 前台 html css js 实现了注册 登陆 权限校验 上传歌曲 下载歌曲 播放歌曲 删除歌曲 个人歌单 后台 用户管理 mv上传 播放 歌曲新增
  • JVM安全点详解

    1 安全点是什么 在虚拟机在进行可达性分析时 HotSpot虚拟机会在特定的位置记录在哪有引用 这些特定的位置就叫做安全点 2 安全点的作用是什么 上边已经说过了 在Oomap的帮助下 HotSpot虚拟机很快就完成了GC Roots枚举