java引用:强软弱虚
软引用空间不足时会被回收
软引用非常适合做缓存
弱引用:只要有垃圾回收,就会被回收
虚引用回不回收都拿不到 他只有一个作用,管理直接内存 也是只要有垃圾回收就会被回收
ThreadLocal
Spring事务,@Transactional控制conection
tl.set其实是以Treadlocal为key 放入的对象为value 构造的一个map
因为是以当前线程为key来放的value 所以肯定不会发生弄串的问题 是一对一的
每个线程都有自己的一个兜 都往自己兜里放东西
Treadlocal使用了弱引用
为什么用弱引用:用强引用容易导致内存泄漏 弱引用方便垃圾处理器回收
只要tl.set指向空 threadlocal就会被回收掉
在每次get 和set的时候Treadlocal会把treadlocalMap里面的null键记录全部清除掉 但是依然需要remove
用弱引用消除了Threadlocal这个key的内存泄漏, 用remove消除了该条Map记录的内存泄漏
如果是线程池,用完线程1之后应该首先清理掉TreadLocal 与 TreadlocalMap中的数据
虚是专门用来管理对外内存的
软 缓存 弱 防止一些关于Map的内存泄漏 Treadlocal里面防止内存泄漏
Teadlocal用在什么地方?
Spring关于transactional的处理 MyBatis关于分页的场景