虚拟机3.4 HotSpot算法实现
2017-11-09 11:58
197 查看
3.4.1 枚举根节点
在类加载完成时,Hotspot会把对象内什么偏移量上是什么类型数据计算出来,在JIT编译时,会记录栈和寄存器中哪些位置是引用。因此在GC扫描时就直接知道这些信息了。
OopMap(Oop:Ordinary Object Pointer,普通对象指针):一个存储了可能成为GC Roots的引用信息的Map,记录了在该类型的对象内什么偏移量上是什么类型的数据。在源代码里面每个变量都是有类型的,但是编译之后的代码就只有变量在栈上的位置了。oopMap就是一个附加的信息,告诉你栈上哪个位置本来是个什么东西。
通过OopMap可以完成GC Roots的枚举.
3.4.2 安全点
在 方法调用、循环跳转、异常跳转这些‘安全点’才会生成OopMap,程序执行到安全点出才有可能GC。
发生GC时,需要所有线程执行到‘安全点’停顿下来。有两种方案:
抢先式中断:在发生GC时,停顿所有线程,如没到达安全点的线程让其恢复后跑到安全点再停顿。
主动式中断:当GC要中断线程时,设置一个中断flag,各个线程轮询这个flag,flag为true,就线程自己中断。
3.4.3 安全区域
当线程被挂起时,无法响应JVM的要求到达‘安全点’,此时就需要线程执行到安全区域,亦可进行GC,当线程离开安全区域时,需检查系统是否完成了根节点枚举(或整个GC过程),若完成,则线程继续执行,否则需等待可以离开的信号。
在类加载完成时,Hotspot会把对象内什么偏移量上是什么类型数据计算出来,在JIT编译时,会记录栈和寄存器中哪些位置是引用。因此在GC扫描时就直接知道这些信息了。
OopMap(Oop:Ordinary Object Pointer,普通对象指针):一个存储了可能成为GC Roots的引用信息的Map,记录了在该类型的对象内什么偏移量上是什么类型的数据。在源代码里面每个变量都是有类型的,但是编译之后的代码就只有变量在栈上的位置了。oopMap就是一个附加的信息,告诉你栈上哪个位置本来是个什么东西。
通过OopMap可以完成GC Roots的枚举.
3.4.2 安全点
在 方法调用、循环跳转、异常跳转这些‘安全点’才会生成OopMap,程序执行到安全点出才有可能GC。
发生GC时,需要所有线程执行到‘安全点’停顿下来。有两种方案:
抢先式中断:在发生GC时,停顿所有线程,如没到达安全点的线程让其恢复后跑到安全点再停顿。
主动式中断:当GC要中断线程时,设置一个中断flag,各个线程轮询这个flag,flag为true,就线程自己中断。
3.4.3 安全区域
当线程被挂起时,无法响应JVM的要求到达‘安全点’,此时就需要线程执行到安全区域,亦可进行GC,当线程离开安全区域时,需检查系统是否完成了根节点枚举(或整个GC过程),若完成,则线程继续执行,否则需等待可以离开的信号。
相关文章推荐
- 3.4 HotSpot算法实现
- HotSpot虚拟机的算法实现——深入理解Java虚拟机(八)
- HotSpot 虚拟机的算法实现
- 《深入理解 Java 虚拟机》- 笔记 - HotSpot 的垃圾收集算法实现
- nachos 3.4 实现抢占式多级队列反馈算法
- HotSpot算法实现
- 《深入理解java虚拟机》学习笔记05--HotSpot中对象存活判读算法和垃圾收集算法的实现
- [置顶] HotSpot虚拟机实现中几个重要的类
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
- Java虚拟机 垃圾收集算法及HotSpot算法实现
- 《JVM学习系列》四.垃圾收集算法及HotSpot的算法实现
- 【005】【JVM——Hotspot算法实现存活对象判定和垃圾收集】
- HotSpot的垃圾回收算法实现
- JVM系列六(HotSpot的算法实现)
- HotSpot的垃圾收集算法实现
- 垃圾收集与分配策略——(三)HotSpot的算法实现
- Hotspot虚拟机- 垃圾收集算法和垃圾收集器
- Java虚拟机(四)-HotSpot的算法实现
- 深入研究虚拟机之垃圾收集(GC)算法实现
- HotSpot的算法实现