垃圾回收中的安全点与安全区域
文章目录
- 1. 垃圾回收中的安全点
- 2. 垃圾回收中的安全区域
1. 垃圾回收中的安全点
安全点:程序执行过程中需要进行垃圾回收时,只有在特定的位置停顿下来开始进行GC,这些特定位置称之为安全点(Safepoint)。
Safepoint的选择很重要,如果太少可能导致GC等待用户线程执行的时间太长;如果太多,就是太频繁的执行GC,影响性能。大部分指令执行时间都非常短,通常会根据是否具有让程序长时间执行的特征为标准,比如选择一些执行时间较长的指令作为saftpoint,如方法调用、循环跳转和异常跳转等。
当多个用户线程正在执行时,此时如果要发生GC,如何检查所有用户线程都执行到了最近的安全点停顿下来了呢?分如下两种方式:
- 抢先中断:GC发生时,首先中断所有的用户线程,如果有用户线程还未执行到安全点处,就恢复线程,让线程跑到安全点处。目前没有虚拟机采用此种形式;
- 主动式中断:设置一个中断标志,各个线程执行到SafePoint的时候主动轮询这个标志,如果该标志为真,则将自己线程进行中断。
2. 垃圾回收中的安全区域
Safepoint保证了程序执行时,如果发生了GC,需等到程序执行到安全点处开始进入GC。但是如果程序没有执行时呢?比如线程处于sleep状态或blocked状态,此时线程无法响应JVM的中断请求,无法走到安全点去中断挂起线程,JVM也不太可能等待线程被唤醒,否则GC整个过程耗时过长,影响性能。鉴于这种情况,就可以用安全区域(Safe Region)来解决。
Safe Region指在一块代码片段中,对象的引用关系不会发生变化,不会影响到可达对象分析的准确性,这个区域中的任何位置开始GC都是安全的。也可以把Safe Region看做是扩展了的Safepoint。
实际执行时:
- 当线程运行到Safe Region代码时,首先标识已经进入Safe Region区域,如果在该区域执行期间发生了GC,JVM会忽略标识Safe Region状态的代码,即JVM执行GC垃圾清理工作,而Safe Region状态的线程也会继续执行,因为该线程不会改变GC ROOTS,不会影响垃圾回收。
- 当这个线程即将离开Safe Region区域时,会首先检查JVM是否已经完成GC,如果完成了,则该线程继续执行;如果未完成,该线程必须等待GC完成,等到收到可以安全离开Safe Region的信号为止。
垃圾回收中的安全点与安全区域相关推荐
- 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例
53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...
- Java程序员的日常—— 垃圾回收中引用类型的作用
在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...
- JVM垃圾回收中新生代老生代的问题
今天看了下Jvm中新生代和老年代的定义和解析,然后看到一篇博,把自己整懵了,还好后面应该是懂了. 首先是我看到的关于新生代和老年代相关的部分 转自https://www.cnblogs.com/gao ...
- 垃圾回收中的分代年龄
为什么CMS里的分代年龄是6而不是15 CMS (Concurrent Mark Sweep) 是一种基于分代的垃圾收集器,其中分代年龄指的是一个对象在年轻代中经历了多少次垃圾收集.在 CMS 中,当 ...
- 在java中finalize_在Java垃圾回收中使用finalize()方法
当垃圾收集器确定不再对特定对象进行引用时,该finalize()方法将由该对象上的垃圾收集器调用.该finalize()方法不需要参数,也不返回值. finalize()给出了演示Java方法的程序, ...
- java中对JVM的深度解析、调优工具、垃圾回收
jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...
- 在Hotspot JVM中跟踪过多的垃圾回收
由于内存泄漏或其他内存问题,经常导致应用程序冻结,仅使垃圾收集器(GC)进程运行失败,试图释放一些空间. 直到看门狗(或沮丧的管理员)重新启动应用程序并且问题从未解决之前,这种情况一直发生. 本文的目 ...
- 一文详解java中对JVM的深度解析、调优工具、垃圾回收
2019独角兽企业重金招聘Python工程师标准>>> jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以 ...
- 垃圾回收 内存管理 python
20220225 https://mp.weixin.qq.com/s/94SmSNEkwmz-Eu-hBUo0Lg Python的内存管理机制 在windows 中直接在任务管理其中关掉python ...
最新文章
- Leetcode 83. 删除排序链表中的重复元素
- 用Tableau画可调整的树状图(Tree Diagram)
- 文件处理之解决使用 feof(c语言)或(fin.eof())出现多读问题
- 四十九、深入了解两个并发接口Callable和Runnable的区别
- Leetcode--925. 长按键入
- shell之case和function
- python爬虫:读取PDF
- LZW压缩算法解码器实现
- Rust: 从csv文件转成kbar的尝试:速度,还有Julia和激情
- JAVA映射文件到内存,java之内存映射文件
- 浙江省计算机1级考试Excel,浙江省计算机一级考试(2014)Excel试题
- python爬虫爬取网易云音乐歌手信息
- 【Python计量】参数假设检验
- MCAL配置-Cdd_Ipc
- blender 51个必须熟练记住的基础操作
- ios云信不能全屏_ios集成网易云信IM功能遇到的坑
- C语言编程练习:打印九九口诀表
- STM32F40xxx 系列芯片引脚图
- python 计算快递费
- jeep智能手表软件测评中心的测试,智能手表哪款好之Jeep新款智能手表试用测评...