黑马程序员技术交流社区

标题: 代理第一次执行method的时间为什么比较长? [打印本页]

作者: 吴光新    时间: 2013-9-14 10:29
标题: 代理第一次执行method的时间为什么比较长?
先看代码
  1. public class Test01 {
  2.         @SuppressWarnings("unchecked")
  3.         private static <T> Collection<T> newProxyArrayList() {
  4.                 //返回代理实例。
  5.                 return (Collection<T>)Proxy.newProxyInstance(
  6.                 Collection.class.getClassLoader(),
  7.                 new Class[] {Collection.class},
  8.                 new InvocationHandler() {               
  9.                         private Collection<T> arrayList = new ArrayList<T>();
  10.                         public Object invoke(Object proxy, Method method, Object[] args) {
  11.                                 long start = System.nanoTime();
  12.                                 Object retVal = null;
  13.                                 try {
  14.                                         retVal = method.invoke(arrayList, args);
  15.                                 } catch (IllegalArgumentException e) {
  16.                                         e.printStackTrace();
  17.                                 } catch (IllegalAccessException e) {
  18.                                         e.printStackTrace();
  19.                                 } catch (InvocationTargetException e) {
  20.                                         e.printStackTrace();
  21.                                 }
  22.                                 long end = System.nanoTime();
  23.                                 System.out.println(method.getName()+"()执行时长:"+(end-start)+"纳秒");
  24.                                 return retVal;
  25.                         }
  26.                 });
  27.         }
  28.         
  29.         /**
  30.          * 代理实例测试
  31.          */
  32.         public static void main(String[] args) {
  33.                 Collection<String> ProxyArrayList = newProxyArrayList();
  34.                 <FONT color=red>ProxyArrayList.add("a");
  35.                 ProxyArrayList.add("b");
  36.                 ProxyArrayList.add("c");
  37. </FONT>                System.out.println(ProxyArrayList);
  38.         }
  39. }
  40. /*
  41. <FONT color=gray>运行结果:
  42. add()执行时长:139953纳秒
  43. add()执行时长:3732纳秒
  44. add()执行时长:2799纳秒
  45. toString()执行时长:31101纳秒
  46. [a, b, c]</FONT>
  47. */
复制代码
问题是,为什么代理在第一次执行add()时间那么长?






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2