public static void main(String[] args) { String abc=new String("abc"); WeakReference<String> weak=new WeakReference<String>(abc); System.out.println("print:" +weak.get()); abc=null; System.gc(); System.out.println("print:" +weak.get()); }
弱引用有什么好处?
强引用的对象GC的要求严格,必须没有引用的状况下才能够回收(GC Roots不可达),Java设计了一种短暂生命周期的对象,弱引用对象,只在建立和FGC以前有效,FGC以后,无论有没有继续引用,都直接释放内存的一种机制。
帮助更好的管理内存。面试
ThreadLocal中 弱引用的使用架构
ThreadLocal 和OOM
问题来了,若是一个线程不停的给不一样thradLocal属性设置值,而且该线程长期不结束,那么这些threadLocal对象会在fgc的时候被GC掉,可是value值并不会被GC掉,由于是线程.ThreadLocalMap.Entry.value 在强引用,因此这些value值,既不能被访问到(key已经被回收了),又没法被回收,并且全部引用了这个ThreadLocal的线程里,都有这个现象。因此容易形成OOM学习
ThreadLocal和线程池
线程池里面的ThreadLocal会出错吗?
会的,因此新任务启动的时候,要init,把全部threadlocal属性都置为null线程
以为不错请点赞支持,欢迎留言或进个人我的群855801563领取【架构资料专题目合集90期】、【BATJTMD大厂JAVA面试真题1000+】,本群专用于学习交流技术、分享面试机会,拒绝广告,我也会在群内不按期答题、探讨。设计