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

Kotlin中SynchronizedLazyImpl引发Long monitor contention,如何追踪根源?

问题排查:Kotlin Lazy委托引发的长监视器竞争警告

问题描述

收到警告:Long monitor contention at java.lang.Object kotlin.SynchronizedLazyImpl.getValue()(LazyJVM.kt:69) waiters=5。排查后定位到Kotlin标准库LazyJVM.kt:69,推测是lazy委托导致问题。移除自身代码中所有lazy委托的使用后,仍收到该警告,想知道如何追踪具体调用原因,以及是否存在遗漏点。

问题定位结果

通过堆栈追踪发现遗漏了一处用lazy初始化的单例对象,该对象被多个函数几乎同时调用。由于Kotlin的lazy委托默认是线程安全的,仅会执行一次初始化逻辑,其他同时发起的调用会被阻塞,直到初始化完成,因此引发了监视器竞争警告。

复现方法

  • 创建一个初始化耗时的lazy单例对象,可通过添加人工延迟模拟:
    val expensiveSingleton by lazy {
        Thread.sleep(1000) // 模拟耗时初始化
        ExpensiveObject()
    }
    
  • 在多个不同的函数中,几乎同时调用这个单例对象

内容的提问来源于stack exchange,提问作者Cyber Avater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:43:16