【死记硬背】
STW即Stop-The-Word,是在垃圾回收算法执行过程中,需要将JVM内存冻结的一种状态。在STW状态下,Java中除GC线程外所有的线程都是停止运行的,native方法可以执行,但是不能跟JVM进行交互。当GC线程执行完毕后,中断的Java线程才会继续执行。STW是不可避免的,因为垃圾回收算法的执行一定会出现STW,而我们最好的解决办法就是减少停顿的时间,是GC各种算法优化的重点,同时这也是JVM调优的重点。
【答案解析】
为什么会STW?
垃圾回收是根据可达性分析算法,搜索GC Root根的引用链,将不在引用链上的对象当做垃圾回收,设想我们执行某个方法的时候,此时产生了很多局部变量,刚好老年代满了需要进行Full gc,如果不停止线程,垃圾回收正在根据这些局部变量也就是GC Root根搜索引用链,此时这个方法结束了,那么这些局部变量就都会被销毁,这些引用链的GC Root根都销毁了,这些引用当然也成了垃圾对象,这样就会导致在垃圾回收的过程中还会不断的产生新的垃圾。
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可%免费领取楼主的所有面试题资料!