You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:58:11