简述stop the world

简介: stop the world

进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为Stop The World。也简称为STW。
在HotSpot中,有个数据结构(映射表)称为OopMap。一旦类加载动作完成的时候,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,记录到OopMap。在即时编译过程中,也会在特定的位置生成 OopMap,记录下栈上和寄存器里哪些位置是引用。
这些特定的位置主要在:
1.循环的末尾(非 counted 循环)
2.方法临返回前 / 调用方法的call指令后
3.可能抛异常的位置
这些位置就叫作安全点(safepoint)。 用户程序执行时并非在代码指令流的任意位置都能够在停顿下来开始垃圾收集,而是必须是执行到安全点才能够暂停。

相关文章
【多线程面试题 三】、 run()和start()有什么区别?
run()方法定义线程执行的任务,而start()方法启动线程,使得run()在新的线程中异步执行;直接调用run()方法只会同步执行run()中的代码,不会创建新线程。
|
3月前
|
Java API
Java演进问题之如果程序不满足"closed-world"假设,Substrate VM如何解决
Java演进问题之如果程序不满足"closed-world"假设,Substrate VM如何解决
|
3月前
run()方法和start()方法测试解析
run()方法和start()方法测试解析
|
4月前
|
Java C语言 C++
实现Hello,World!的方式
实现Hello,World!的方式
|
5月前
|
Android开发
开发Hello World 程序
开发Hello World 程序
|
5月前
|
Java
多线程中的run方法和start方法有什么区别?
多线程中的run方法和start方法有什么区别?
|
Java API
多线程中run()和start()的异同详细分析(全)
目录前言1. 定义2. 代码区别 前言 为什么不直接调用线程中的run方法,而要通过调用start方法才可以实现线程的异步执行互不干扰? run方法和start的调用方法区别在于哪? 相信看到此处的人们,都会有类似的疑问,这篇文章就为你打开新世界,铭记脑海中 1. 定义 查看其官方的api接口定义 start方法 “ “Causes this thread to begin execution; the Java Virtual Machine calls the run method of this t
156 0
多线程中run()和start()的异同详细分析(全)
|
JavaScript 前端开发 开发者
Hello World 程序|学习笔记
快速学习 Hello World 程序
|
缓存 Java
JVM相关 - SafePoint 与 Stop The World 全解)(上)
JVM相关 - SafePoint 与 Stop The World 全解)(上)
JVM相关 - SafePoint 与 Stop The World 全解)(上)
|
算法 编译器 程序员
深入理解《hello world》是如何实现的
深入理解《hello world》是如何实现的
深入理解《hello world》是如何实现的