网上有很多文章说ThreadLocal会发生out of memory.但是当我创建大量ThreadLocal对象的时候,并没有发生异常,而且Element对象被正常的垃圾回收了。
通过jvisualvm可以看到,确实GC发生了
如果你们有异常发生,请留言。
// -XX:+PrintGCDetails -Xms100m -Xmx100m
public class Test {
public static long total = 1000000000;
public static void main(String[] args) {
for(long i = 0; i < total; i++) {
// 给GC一些时间
if(i % 10000 == 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ThreadLocal<Element> tl = new ThreadLocal<>();
tl.set(new Element(i));
}
}
}
class Element {
private long v;
public Element(long v) {
this.v = v;
}
public void finalize() {
System.out.println(v);
}
}