當我們利用 ThreadLocal 來管理數據時,我們不可避免地會面臨內存泄漏的風險。
原因在于 ThreadLocal 的工作方式。當我們在當前線程的 ThreadLocalMap 中存儲一個值時,一旦這個值不再需要,釋放它就變得至關重要。如果不這樣做,那么該值所占用的內存將一直被分配,逐漸耗盡可用的內存池。這就好比一條漏水的鐵管,隨著時間的推移,越來越多的水(內存資源)被浪費掉,實在是令人惋惜。
然而,在我的工作經歷中出現了一個有趣的異常情況。盡管我從未明確編寫過用于釋放與 ThreadLocal 相關內存的代碼,但我的程序卻一直穩定運行,沒有出現內存泄漏的問題。這讓我感到困惑:這里究竟是什么機制在起作用呢?為什么這些程序能夠避免這樣一個常見的陷阱呢?