在Kotlin中,您可以使用一个伴随对象创建一个单例:
class MyClass {
companion object {
fun doSomething() {
}
}
}
根据Kotlin文档,它指出:
请注意,即使同伴对象的成员看起来像其他语言中的静态成员,在运行时它们仍然是真实对象的实例成员...
https://kotlinlang.org/docs/reference/object-declarations.html
这是否意味着在伴随对象中使用函数后,类的实例(MyClass)会在应用程序的整个生命周期中保留在内存中?Android Studio中有没有一种方法可以检查这种情况?
类(MyClass)的实例在应用程序的整个生命周期中都保留在内存中?
在科特林
class MyClass {
companion object {
fun doSomething() {
}
}
}
在JVM中转换的MyClass(Kotlin)
public final class MyClass {
public static final MyClass.Companion Companion = new MyClass.Companion(null);
public static final class Companion {
public final void doSomething() {
}
private Companion() {
}
public Companion() {
this();
}
}
}
如上代码,在JVM中companion object
被声明为Companion
类,并且static
在MyClass
类内部被创建为字段。因此,不会被gc收集。因此,对象(Companion)的内存在期间保留ProcessLifecycle
。static final object
在正常情况下不会发布。
总之,如果MyClass.Companion
在应用程序中引用实例,则该实例将不会被垃圾回收。(在一般的Classloader上)。
*如果未MyClass.Companion
在应用程序中引用实例,则可以通过代码收缩功能将其删除。
Android Studio中有没有一种方法可以检查这种情况?
您可以通过android studio> profiler>堆转储查看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句