关于 Java 匿名类的引用问题

突然想到一个问题:
下面的这段代码是非常非常危险,会导致内存泄漏。当退出该 Activity 时,由于匿名内部类 Thread 持有外部类(这里的 MainActivity)的引用,导致 MainActivity 的实例对象无法被回收,从而发生内存泄漏。

我的疑问是:
JVM 的 GC 规则是看从 GC roots 能不能到达某个对象,不能到达就会在下一次 GC 时被回收,可是这里的 Thread 对象并没有显示地指向它的引用,它为什么不被回收呢?难道是有什么隐式引用存在吗?

注:由于本人水平有限,我的提问中可能本身就有不对的地方,如有不对的地方,请见谅啦~

public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conten);
        
        new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(100 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
            }
        }.start();
        
    }
}

这里内存泄露是因为Thread休眠了,无法被系统回收,等休眠时间过来才会被回收。

img