Skip to content

Timer 线程泄漏:每实例创建原生线程且覆盖/删除不 cancel #186

Description

@xlorne

场景说明

审计全项目 java.util.Timer 使用,发现 3 处每实例/每缓存项创建原生 Timer 线程,且覆盖、删除、清理时均不 cancel,长时间运行会累积线程直至 unable to create native thread。

发现的问题

1. NodeViewJavaScriptCacheContext

每次 cache() 新建 Timer;同 key 覆盖、save/remove/delete 不 cancel,线程存活至 15 分钟缓存过期。

2. MockInstance + MockInstanceFactory

每实例一个 Timer(每秒检查过期);仅过期时自 cancel,外部 clear(/cleanMock)不 cancel,线程存活至 15 分钟自动过期。

3. DelayTaskManager

每任务一个 Timer(单次调度,执行后自动结束,问题较轻)。

期望实现

统一替换为共享 daemon ScheduledExecutorService(单线程调度),覆盖/删除/关闭时 cancel,消除线程泄漏。

验证场景

  • 全项目无 Timer 残留
  • 模块全量 178 测试通过
  • 全项目 clean install 通过

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions