# commonEventManager延迟释放机制问题

#### 问题现象

commonEventManager注册时会传入一个callback，开发时发现unsubscribe后，这个callback仍会被系统持有，抓取内存快照分析发现，一段时间后才会被逐渐释放，不立即释放的原因是什么呢？

#### 解决方案

*   系统设计考量：
    
    公共事件模块为保证事件处理的可靠性，在调用unsubscribe后仍会保留回调引用一段时间（通常1-2个GC周期），避免异步事件处理时发生资源提前释放，这种机制属于系统级安全设计。
    
*   垃圾回收机制：
    
    HarmonyOS的ArkTS底层基于JS引擎，GC策略采用分代回收机制。未被立即释放的callback对象会标记为可回收状态，但具体回收时机由运行时内存压力决定。
    

#### 总结

该现象属于框架层的保护机制，开发者应重点检查自身代码是否符合以下规范：

*   确保subscribe/unsubscribe成对调用。
*   避免在回调中持有外部对象强引用。
*   使用最新API版本。