Skip to content

Commit a952018

Browse files
author
26684
committed
修正ThreadLocal造成内存泄漏的描述
- 将"机会造成内存泄漏"修正为"即会造成内存泄漏"
1 parent 24cf144 commit a952018

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

docs/java/concurrent/java-concurrent-questions-03.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
148148
- **key 是弱引用**`ThreadLocalMap` 中的 key 是 `ThreadLocal` 的弱引用 (`WeakReference<ThreadLocal<?>>`)。 这意味着,如果 `ThreadLocal` 实例不再被任何强引用指向,垃圾回收器会在下次 GC 时回收该实例,导致 `ThreadLocalMap` 中对应的 key 变为 `null`
149149
- **value 是强引用**:即使 `key` 被 GC 回收,`value` 仍然被 `ThreadLocalMap.Entry` 强引用存在,无法被 GC 回收。
150150

151-
`ThreadLocal` 实例失去强引用后,其对应的 value 仍然存在于 `ThreadLocalMap` 中,因为 `Entry` 对象强引用了它。如果线程持续存活(例如线程池中的线程),`ThreadLocalMap` 也会一直存在,导致 key 为 `null` 的 entry 无法被垃圾回收,机会造成内存泄漏
151+
`ThreadLocal` 实例失去强引用后,其对应的 value 仍然存在于 `ThreadLocalMap` 中,因为 `Entry` 对象强引用了它。如果线程持续存活(例如线程池中的线程),`ThreadLocalMap` 也会一直存在,导致 key 为 `null` 的 entry 无法被垃圾回收,即会造成内存泄漏
152152

153153
也就是说,内存泄漏的发生需要同时满足两个条件:
154154

0 commit comments

Comments
 (0)