1、什么是内存泄漏
内存泄漏,即已经申请的内存空间无法释放,就会造成内存泄漏,例如线程死循环、资源不关闭等,大量的内存泄漏堆积就会造成内存不够,从而发生内存溢出。
JVM内存模型和常见内存溢出
2、TreadLocal内存泄漏的场景
TreadLocalMap的Entry继承了WeakReference
单个线程的情况下,线程结束的时候,内存泄漏的value会被回收,不会有什么问题。不过使用的线程池呢,线程是常备线程,会一直运行下去,这样value内存会被一直占用,并且可能会不断增加,这样就严重了。那需要怎么来避免和解决呢。
3、解决方法
这个没有太好的解决方案,只能通过规范代码使用来解决,上一章中说到expungeStaleEntry方法,会将这种key引用已经失效的entry对象释放。所以为了避免内存泄漏,在ThreadLocal使用结束以后,规范操作,执行下remove方法。



