VMThread专门用来执行一些特殊的VM操作,比如dispatchingGC,threaddump等,这些任务要求整个Heap和所有线程的状态是静态一致的。因此JVM引入了安全点(SafePoint)的概念,想办法在需要VMOperation的时候通知所有线程进入一个静态的安全点。需要进入安全点的vm操作1:JIT相关,比如Codedeoptimization,Flushingcodecache;2:类重定义(如javaagent、AOP代码植入生成的instrumentation);3:Biasedlockrevocation取消偏向锁;4:各种调试操作(例如线程转储或死锁检查);5:gc(主要是yanggc和marknodesinconcurrentgc)查看stw消耗的时间和触发jvm参数的原因-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime-XX:+PrintSafepointStatistics-XX:PrintSafepointStatisticsCount=1-XX:+解锁诊断VMOptions-XX:+LogVMOutput-XX:LogFile=/dev/shm/vm.log
