摘要: 之前使用cglib的时候不需要将classLoader作为参数传入,但动态代理却要,带着这个疑惑进入这个方法: Proxy.newProxyInstance(classLoader,interfaces,InvocationHandler) 要在classLoader里去找interfaces,如果也加载进来了才能继续执行,并且用ProxyGenerator动态生成了一个代理类的字节码文件(使用了缓存技术,只需要生成一次),然后用classLoader将这个字节码文件加载进来。这就是classLoader的作用。 可以这样看生成的字节码类。 加入执行参数: System.setP... 阅读全文
posted @ 2014-01-17 23:36 寂静沙滩 阅读(4448) 评论(1) 推荐(0) 编辑
摘要: threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存在这些引用. 看下图: 实线代表强引用,虚线代表弱引用. 每个thread中都存在一个map, map的类型是ThreadLocal.ThreadLocalMap. Map中的key为一个threadlocal实例. 这个Map的确使用了弱引用,不过弱引用只是针对key. 每个key都弱... 阅读全文
posted @ 2014-01-17 23:14 寂静沙滩 阅读(50658) 评论(14) 推荐(5) 编辑
摘要: 一个一直运行正常的应用突然无法运行了。在类库被更新之后,返回下面的错误。Exceptioninthread"main"java.lang.NoSuchMethodError:com.nhn.user.UserAdmin.addUser(Ljava/lang/String;)V atcom.nhn.service.UserService.add(UserService.java:14) atcom.nhn.service.UserService.main(UserService.java:19)应用的代码如下,而且它没有被改动过。// UserService.java … p 阅读全文
posted @ 2014-01-17 14:21 寂静沙滩 阅读(6382) 评论(0) 推荐(3) 编辑