Threadlocal是否存在内存泄露
Threadlocal 是否存在内存泄露,需要解决以下的疑惑:
1. ThreadLocal.ThreadLocalMap 中提到的弱引用,弱引用究竟会不会被回收?
2. 弱引用什么情况下回收?
3. JAVA 的 ThreadLocal 和在什么情况下会内存泄露?
最近看到网上的一篇文章,分析说明 ThreadLoca l是如何内存泄露的。代码例子普遍是这样子的:
public class Test {
public static void main(String[] args) throws InterruptedException {
ThreadLocal tl = new MyThreadLocal();
tl.set(new My50MB());
tl=null;
System.out.println("Full GC");
System.gc();
}
public static class MyThreadLocal extends ThreadLocal {
private byte[] a = new byte[1024*1024*1];
@Override
public void finalize() {
System.out.println("My threadlocal 1 MB finalized.");
}
}
public static class My50MB {
private byte[] a = new byte[1024*1024*50];
@Override
public void finalize() {
System.out.println("My 50 MB finalized.");
}
}
}
输出结果:
Full GC
My threadlocal 1 MB finalized.
This chapter requires login to view full content. You are viewing a preview.
Login to View Full Content