伴随对象是否在应用程序的生命周期中保留在内存中

Android开发

在Kotlin中,您可以使用一个伴随对象创建一个单例:

class MyClass {
   companion object {
        fun doSomething() {

        }
    }
}

根据Kotlin文档,它指出:

请注意,即使同伴对象的成员看起来像其他语言中的静态成员,在运行时它们仍然是真实对象的实例成员...

https://kotlinlang.org/docs/reference/object-declarations.html

这是否意味着在伴随对象中使用函数后,类的实例(MyClass)会在应用程序的整个生命周期中保留在内存中?Android Studio中有没有一种方法可以检查这种情况?

蔡奕迅

类(MyClass)的实例在应用程序的整个生命周期中都保留在内存中

JVM中的伴侣对象

在科特林

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类,并且staticMyClass内部被创建为字段因此,不会被gc收集。因此,对象(Companion)的内存在期间保留ProcessLifecyclestatic final object在正常情况下不会发布。

总之,如果MyClass.Companion在应用程序中引用实例,则该实例将不会被垃圾回收。(在一般的Classloader上)。

*如果未MyClass.Companion在应用程序中引用实例,则可以通过代码收缩功能将其删除

Android Studio中有没有一种方法可以检查这种情况?

您可以通过android studio> profiler>堆转储查看

参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android-在应用程序的生命周期中保留变量的值

来自分类Dev

我可以将对象保留在内存中直到应用程序退出吗?

来自分类Dev

退出后应用程序保留在内存中

来自分类Dev

当应用程序保留在内存中时,财产被释放

来自分类Dev

jQuery Mobile对象保留在内存中

来自分类Dev

是否可以将对象保留在内存中以实现比Redis或Memcached更快的缓存存储?

来自分类Dev

Android是否将视图对象层次结构保留在内存中?

来自分类Dev

ViewController保留在内存中

来自分类Dev

在手机中的整个Android应用程序生命周期中存储变量的方法

来自分类Dev

在手机中的整个Android应用程序生命周期中存储变量的方法

来自分类Dev

Swift闭包中保留内存的生命周期

来自分类Dev

Android-如何在整个应用程序生命周期中使用ORMLite dbhelper

来自分类Dev

在C#.NET应用程序的整个生命周期中使用DecisionTree

来自分类Dev

在整个应用程序生命周期中的 Firebase 观察者

来自分类Dev

Android:应用程序的生命周期

来自分类Dev

播放应用程序生命周期

来自分类Dev

进程是否保留在内存中直到完成?

来自分类Dev

Android:在整个应用程序生命周期内保留数据

来自分类Dev

使用SailsJS / Express在请求之间将对象保留在内存中

来自分类Dev

Android:Volley JsonRequest将整个对象保留在内存中

来自分类Dev

使用JNI从Java调用之间将本机对象保留在内存中

来自分类Dev

Simulink Masks:是否可以使变量保留在内存中?

来自分类Dev

如果我不分配类的实例,该实例是否保留在内存中?

来自分类Dev

MongoDB聚合$ project是否会减少要保留在内存中的数据量?

来自分类Dev

OpenSSH代理是否将未加密的密钥或密码短语保留在内存中?

来自分类Dev

全局变量是否始终保留在内存中?

来自分类Dev

OAuth 2中的授权代码在运行服务器的客户端应用程序的生命周期中仅使用一次吗?

来自分类Dev

使用JIT进行的优化是否只发生一次,并且可以永久保留,或者仅在运行的生命周期中保留?

来自分类Dev

如何在Spark Streaming应用程序的生命周期中使SQLContext实例保持活动状态?

Related 相关文章

  1. 1

    Android-在应用程序的生命周期中保留变量的值

  2. 2

    我可以将对象保留在内存中直到应用程序退出吗?

  3. 3

    退出后应用程序保留在内存中

  4. 4

    当应用程序保留在内存中时,财产被释放

  5. 5

    jQuery Mobile对象保留在内存中

  6. 6

    是否可以将对象保留在内存中以实现比Redis或Memcached更快的缓存存储?

  7. 7

    Android是否将视图对象层次结构保留在内存中?

  8. 8

    ViewController保留在内存中

  9. 9

    在手机中的整个Android应用程序生命周期中存储变量的方法

  10. 10

    在手机中的整个Android应用程序生命周期中存储变量的方法

  11. 11

    Swift闭包中保留内存的生命周期

  12. 12

    Android-如何在整个应用程序生命周期中使用ORMLite dbhelper

  13. 13

    在C#.NET应用程序的整个生命周期中使用DecisionTree

  14. 14

    在整个应用程序生命周期中的 Firebase 观察者

  15. 15

    Android:应用程序的生命周期

  16. 16

    播放应用程序生命周期

  17. 17

    进程是否保留在内存中直到完成?

  18. 18

    Android:在整个应用程序生命周期内保留数据

  19. 19

    使用SailsJS / Express在请求之间将对象保留在内存中

  20. 20

    Android:Volley JsonRequest将整个对象保留在内存中

  21. 21

    使用JNI从Java调用之间将本机对象保留在内存中

  22. 22

    Simulink Masks:是否可以使变量保留在内存中?

  23. 23

    如果我不分配类的实例,该实例是否保留在内存中?

  24. 24

    MongoDB聚合$ project是否会减少要保留在内存中的数据量?

  25. 25

    OpenSSH代理是否将未加密的密钥或密码短语保留在内存中?

  26. 26

    全局变量是否始终保留在内存中?

  27. 27

    OAuth 2中的授权代码在运行服务器的客户端应用程序的生命周期中仅使用一次吗?

  28. 28

    使用JIT进行的优化是否只发生一次,并且可以永久保留,或者仅在运行的生命周期中保留?

  29. 29

    如何在Spark Streaming应用程序的生命周期中使SQLContext实例保持活动状态?

热门标签

归档