Kotlin协程Job完成后会自动清理吗?重复用父Scope会有开销吗?
Kotlin协程Job的自动清理与父Scope复用开销问题
Job完成后的自动清理
是的,Kotlin协程中已完成的子Job会被父Job自动清理,父Scope不会持续追踪已结束的子协程。从你提供的测试代码结果可以验证这一点:子协程刚启动时,父Scope的children.count()返回1;延迟1秒后子协程执行完成,父Scope的children.count()变为0,说明父Job已经移除了这个已完成的子Job引用。
重复使用父Scope的开销问题
重复使用同一个父Scope创建新协程不会产生额外开销。因为父Job仅维护当前活跃状态的子Job集合,已完成的子Job会被自动从集合中移除,每次创建新协程只是向活跃集合中添加新的Job实例,不会因为历史完成的Job积累内存或性能负担。
测试代码
suspend fun main() = supervisorScope { launch { println("inner ${this@supervisorScope.coroutineContext.job.children.count()}") //inner 1 } delay(1000) println("outer ${this@supervisorScope.coroutineContext.job.children.count()}") //outer 0 }
内容的提问来源于stack exchange,提问作者Tony Chen
相关产品推荐
相关产品推荐

