强软弱虚引用 ThreadLocal

强引用
  • A a = new A();就是强引用
  • 可以重写finalize来测试,当没有引用指向这个对象时,就会被回收
软引用
  • 一个对象,如果是软引用指向它,那只有在内存不够用的情况下,才会回收它,内存够的情况下不会回收
  • 设置jvm参数 -Xms20M -Xmx20M配合SoftReference来测试,堆内存不够了才会回收
  • 软引用主要用作缓存
弱引用
  • 只要遭遇到GC垃圾回收就会被回收
  • 如果有一个强引用和一个弱引用同时指向一个对象,只要强引用消失,这个对象就会被回收
  • 可以防止内存泄漏,一般用在容器中
  • WeakHashMap:弱引用的Map
虚引用
  • 当对象被回收,会向队列中仍进去一个值,通知你那个对象被回收了
  • 一般用于写虚拟机,回收堆外内存的时候可以使用
ThreadLocal
  • ThreadLocal是线程局部变量,里面的变量都是privat和static修饰的,set和get在线程之间是隔离开的,可以保证每个线程之间设置的值,是线程独有的
  • ThreadLocal提供了线程的本地的实例,每个使用该变量的线程都会初始化一个完全独立的副本。
  • 这个功能主要是由ThreadLocalMap实现的,这个map是在Thread中的属性,把使用的线程作为key值传入,所以可以做到线程独有
  • 当一个线程结束时,它所使用的所有ThreadLocal对应的副本都会被回收。
  • 根据以上特性,ThreadLocal可以用来做声明式事务
  • 也就是在读取配置文件的时候,第一个线程把配置内容读取到ThreadLocal中,后面的线程可以直接从ThreadLocal里面拿,这样就可以保证读到的是同一个Connection
  • ThreadLocalMap
    • ThreadLocalMap使用了弱引用,为了防止线程等于null时,map的key引用依然指向ThreadLocal,这样会产生内存泄漏
    • 但是key值变为null时,会导致整个value再也无法被访问,依然会造成内存泄漏,所以如果用了ThreadLocal一定要把它remove掉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值