获得徽章 0
- 这几天在思考一个jdk动态代理的问题,为什么获取动态代理类被设计成WeakCache三级缓存,且第一级缓存对classloader为弱引用?最终值存储的不是代理类对象而是一个工厂类?今天突然有点开悟了,这里存在两条引用链:第一条代理对象 -> InvocationHandler -> 原始对象 -> 原始类对象 -> 类加载器;同时,第二条代理对象 -> 代理类对象 -> 类加载器。如果最终值为代理类对象,则类加载器将始终保持强引用,就和他作为弱引用一级缓存的Key值相冲突,所以最终值为制造代理类对象的工厂,至于为什么类加载器作为弱引用,是因为想要让类加载器的回收仅收到第一条引用链影响,这样如果类加载器被回收了,说明代理对象、原始对象甚至原始类对象均被回收,这条缓存存在的意义也不复存在。不知道理解的对不对,请路过的大神指点
![[微笑]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)
![[流泪]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
展开评论点赞
![[微笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
![[可怜]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_5.ece2a96.png)