在hotstpot内部,有时候它会把 Java线程暂停掉,有时候又会把它叫做Stop The World,在hotstpot里可以做很多vm级别操作,如 GC、HeapDump/Stack trace、JVMTI、Check vmOperations.hpp,这里列了一个 vmOperations.hpp这个头文件里面列出了绝大部分的这些vm operation。下图演示,如正常的java的线程,运行的过程中,有一个VMthread,有些特殊的条件,触发了一个vm的操作请求,这时候就会发起一个请求,要求Java thread都进入safepoint, Java thread收到请求以后,会自己暂停,等所有的Java thread停下来,整个JVMTI都安全了,可以做一些比较复杂的vm的操作,等操作做完了以后,就可以要求这些Java线程再重新恢复。
举例来说像GC会把在Heap中的Java对象移来移去,如果这时Java线程正在运行的时候,一边运行对象一边移动,Java线程有可能就会访问到一个非法的地址,造成整个JVMTI的crash,所以这时候需要进入safepoint,把整个Java线程给暂停, Stop The World,会很影响性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。