JVM中要做到STW是很难的。为什么这么说呢?因为需要考虑很多很多因素。
一、JVM中存在多种类型的会发生改变内存行为的线程:
二、每种类型的线程个数,在需要STW的那一刻,可能都不止一个。
三、每种类型的线程,在需要STW的那一刻,执行到的代码位置也未可知。
四、每种类型的线程阻塞的点还不能随机。因为线程在阻塞前需要更新OopMap。OopMap是什么?你可以理解成是记录这个线程一路跑下来经历过的所有Java对象的集合。为什么要有OopMap呢?因为没有的话,你就得扫描整个栈,去查找根对象。
官方解释:An object pointer. Specifically, a pointer into the GC-managed heap. (The te