Memory leaks Kotlin伴生对象内存泄漏?

Memory leaks Kotlin伴生对象内存泄漏?,memory-leaks,kotlin,kotlin-companion,Memory Leaks,Kotlin,Kotlin Companion,我正在使用Kotlin进行Android开发。有趣的问题。在Java中,静态字段中的保存上下文是内存泄漏。但如果我在Kotlin companion对象中存储上下文,Android Studio不会说这是内存泄漏。这意味着在Java字节码中,conpanion对象不是静态代码? 例如: class MyApp : Application() { override fun onCreate() { super.onCreate() appContext =

我正在使用Kotlin进行Android开发。有趣的问题。在Java中,静态字段中的保存上下文是内存泄漏。但如果我在Kotlin companion对象中存储上下文,Android Studio不会说这是内存泄漏。这意味着在Java字节码中,conpanion对象不是静态代码? 例如:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        appContext = applicationContext
    }

    companion object {
        lateinit var appContext: Context
    }
}

这里没有内存泄漏?感谢您的回答:)

您的代码实际上是以静态方式存储
上下文的,只是lint无法拾取它并出于某种原因向您发出警告

但是,在这种特定情况下,您实际上不会有造成内存泄漏的风险。您正在静态地存储
应用程序
对象本身,它将在应用程序的整个生命周期中保持活动状态,就像静态变量一样。如果这是另一个寿命较短的
Context
,您会遇到麻烦,但应用程序
Context
应该可以

有关这样做是否安全的参考:


如果您担心泄漏,您可以始终使用,这将防止对象被垃圾收集,直到首先清除所有“强”引用。这不是问题所在。谢谢您的回答!“请注意,即使同伴对象的成员在其他语言中看起来像静态成员,但在运行时它们仍然是真实对象的实例成员”-从文档中可以看出,如果您将上下文存储在同伴对象后面,在引擎盖下,它是一个垃圾回收实例变量。是的,但它所属的伴生对象实例是静态存储的。