Kotlin object单例是否会被JVM回收?未使用时是否占用内存?
Kotlin单例与JVM内存回收相关问题解答
1. Kotlin单例对象是否会被JVM回收?
分场景判断:
- 若单例由**系统类加载器(如Application ClassLoader)**加载,这类类加载器的生命周期与应用一致,只要应用在运行,类加载器就不会被回收,绑定在它上面的单例实例也不会被GC回收。
- 但如果单例由自定义类加载器加载(比如部分框架的热部署场景),当自定义类加载器本身不再被任何引用持有、可被GC回收时,单例实例会跟着类加载器一起被回收。
2. 使用object关键字创建的单例类是否会被JVM回收?
Kotlin的object关键字编译后,本质是生成一个带静态实例的Java类(等效饿汉式单例),所以它的回收规则和普通Kotlin单例完全一致:
// 编译后的等效Java逻辑大致如下 public final class MySingleton { public static final MySingleton INSTANCE; static { INSTANCE = new MySingleton(); } private MySingleton() {} }
系统类加载器加载时不会被回收,自定义类加载器的特殊场景下可能被回收。
3. 若MySingleton从未被使用,在应用运行期间是否会持续占用内存?
不会。JVM的类加载遵循懒加载机制,只要没有任何代码触发MySingleton的类加载(比如引用实例、调用方法/属性等),这个类就不会被加载到内存中,自然也不会创建单例实例,不会占用内存。
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

