[造轮子]写一个关于Java Reflect的工具类之Method 2.

 http://my.oschina.net/iamlegend/blog/266038 之后,立刻着手开始写.并且在晚饭前已经完工一个稍微能看且能用的MethodUtil.

可是在吃饭的时候仔细揣摩了一下,发现还是可能存在问题.主要关于是否要为反射Method建立缓存.

由于java gc机制,会在需要内存时,将强引用以下的资源通通回收.简单讲就是一个Class的生命周期.

那么什么样的Class会被gc回收呢?

  1. 该Class的实例全部被销毁或回收.

  2. 没有对该Class任何的引用.

  3. 加载该Class的加载器被回收.

仔细想了下第二条,"没有对该Class任何的引用".如果我的HashMap中还保留着该Class的引用是否会妨碍到gc对该Class的回收?

回顾一下Class本身的实现,"每次反射前都去查询该类的最后加载时间",并且"对Class对象内容保持的都是SoftReference(软引用)".

也就是说,Class对象其实已经维护好了及时更新的缓存机制,完全不需要我们再去维护一份.

不过鉴于按方法名查找的时间复杂度在O(n),再匹配参数类型,肯定比先找到一样名称的方法O(1),再匹配参数类型慢的多.

又看了spring、jodd等关于反射的Util,发现基本都是直接用的jdk自己的.

可能由于一个Class中的方法不会太多,所以都懒的写这东西.

还是心痒痒,尤其已经写了一半....

还是早点睡吧..下次估摸着写个Field的工具类.


你可能感兴趣的:([造轮子]写一个关于Java Reflect的工具类之Method 2.)