Kotlin中构造函数参数的生命周期

Kotlin中构造函数参数的生命周期,kotlin,constructor,garbage-collection,lifecycle,Kotlin,Constructor,Garbage Collection,Lifecycle,我试图理解Kotlin中构造函数参数的生命周期。 给定以下代码,FooFactory类实例何时可供垃圾收集器收集 由于foodfactory的使用被延迟,运行时是否知道何时释放它 或者,如果编译器不知道何时发布foodfactory,这是否会造成泄漏,并且它将永远存在 福班{ fun doStuff(){} } 食品级工厂{ fun getFoo():Foo{ 返回Foo() } } 类用户(工厂:FooFactory){ val x:Foo by lazy{ factory.getFoo()

我试图理解Kotlin中构造函数参数的生命周期。 给定以下代码,
FooFactory
类实例何时可供垃圾收集器收集

由于
foodfactory
的使用被延迟,运行时是否知道何时释放它

或者,如果编译器不知道何时发布
foodfactory
,这是否会造成泄漏,并且它将永远存在


福班{
fun doStuff(){}
}
食品级工厂{
fun getFoo():Foo{
返回Foo()
}
}
类用户(工厂:FooFactory){
val x:Foo by lazy{
factory.getFoo()
}
}
val user=user(FooFactory())
线程。睡眠(100)
user.x.doStuff()
线程。睡眠(100)

如果您查看使用
SynchronizedLazyImpl
惰性
委托的实现,您将看到,一旦计算出值,初始化lambda就会设置为null:

val typedValue=初始值设定项!!()
_值=类型值
初始值设定项=null
因此,通过这一行:

user.x.doStuff()

FooFactory
符合垃圾收集条件。但是,如果从未访问过
x
,那么
foodfactory
将只在包含
User
对象被垃圾收集后进行垃圾收集。

似乎就是这样。非常感谢。