1   /***************************************************************************************
2    * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved.                 *
3    * http://aspectwerkz.codehaus.org                                                    *
4    * ---------------------------------------------------------------------------------- *
5    * The software in this package is published under the terms of the LGPL license      *
6    * a copy of which has been included with this distribution in the license.txt file.  *
7    **************************************************************************************/
8   package test;
9   
10  /***
11   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
12   */
13  public class CastBench implements Cast {
14      private static final int NR_INVOCATIONS = 1000000000;
15  
16      public void invoke() {
17      }
18  
19      public void invokeInterface() {
20      }
21  
22      public static void main(String[] args) {
23          CastBench bench = new CastBench();
24          for (int i = 0; i < NR_INVOCATIONS; i++) {
25              bench.invoke();
26          }
27  
28          benchRegularInvoke(bench);
29          benchInterfaceInvoke(bench);
30          benchCastInvoke(bench);
31      }
32  
33      private static void benchCastInvoke(CastBench bench) {
34          long start = System.currentTimeMillis();
35          for (int i = 0; i < NR_INVOCATIONS; i++) {
36              ((Cast) bench).invokeInterface();
37          }
38          long end = System.currentTimeMillis() - start;
39          double time = end / (double) NR_INVOCATIONS;
40          System.out.println("cast invoke = " + time);
41      }
42  
43      private static void benchInterfaceInvoke(Cast bench) {
44          long start = System.currentTimeMillis();
45          for (int i = 0; i < NR_INVOCATIONS; i++) {
46              bench.invokeInterface();
47          }
48          long end = System.currentTimeMillis() - start;
49          double time = end / (double) NR_INVOCATIONS;
50          System.out.println("interface invoke = " + time);
51      }
52  
53      private static void benchRegularInvoke(CastBench bench) {
54          long start = System.currentTimeMillis();
55          for (int i = 0; i < NR_INVOCATIONS; i++) {
56              bench.invoke();
57          }
58          long end = System.currentTimeMillis() - start;
59          double time = end / (double) NR_INVOCATIONS;
60          System.out.println("regular invoke = " + time);
61      }
62  }