在业务中曾有为不同的 key
的操作实现锁语义的需求,常见的实现为构建一个线程安全的 Map
实现然后为每个 key
创建对应的对象用于互斥锁,但是该实现存在内存泄漏的问题,即随着不同 key
不停地出现,该 Map
实例会越来越大,之前为每个 key
创建的对象一直驻留在内存中,即使 key
永远不再出现。比如 JDK 7 引入的支持并行类加载的特性 Multithreaded Custom Class Loaders in Java SE 7 中,引入了如下代码:
1 | // Maps class name to the corresponding lock object when the current |