获得徽章 0
这几天在思考一个jdk动态代理的问题,为什么获取动态代理类被设计成WeakCache三级缓存,且第一级缓存对classloader为弱引用?最终值存储的不是代理类对象而是一个工厂类?今天突然有点开悟了,这里存在两条引用链:第一条代理对象 -> InvocationHandler -> 原始对象 -> 原始类对象 -> 类加载器;同时,第二条代理对象 -> 代理类对象 -> 类加载器。如果最终值为代理类对象,则类加载器将始终保持强引用,就和他作为弱引用一级缓存的Key值相冲突,所以最终值为制造代理类对象的工厂,至于为什么类加载器作为弱引用,是因为想要让类加载器的回收仅收到第一条引用链影响,这样如果类加载器被回收了,说明代理对象、原始对象甚至原始类对象均被回收,这条缓存存在的意义也不复存在。不知道理解的对不对,请路过的大神指点[微笑][流泪][可怜]
展开
评论
#新人报道# 我是24年入职的校招生,入职程序员半年,觉得做程序员最重要的不是有高超的技术,而是有对项目的责任心,即owner意识。对于打工仔的生活来说,最重要的是保持向上的生命力。
2
个人成就
文章被点赞 1
文章被阅读 768
掘力值 144
收藏集
1
关注标签
17
加入于