java基础,关于回调和对象引用

异步回调中引用外部方法的对象,当外部方法执行完后,方法中的对象会被回收吗?
class A{
fun a(){
    //局部变量b
    val b = B()
    Thread {
        Thread.sleep(100000)
        //2.这时会被回收吗
        b.b()
    }.start()
    b.b()
    //1.a方法执行完毕,这时会被回收吗
}

}

fun main() {
//调用A的a方法
A().a()
}

a什么时候回收,b什么时候回收

假设线程无限长,无限调用a方法,如果在1处回收,那么执行到2时b就是报空指针,如果在2处回收,那么b会把内存撑爆,对吗

记住一句话就很好理解了:所有非守护线程都执行完毕后,JVM就会自动退出。
这里没有设置子线程为守护线程,所以主线程会等待子线程执行完

对象还存在引用(或被其他对象使用),这时候就不会被回收,

https://www.cnblogs.com/igoodful/p/8727241.html

看完应该有收获