KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > ReflectionPerformanceTestApp


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest;
5
6 import com.tc.object.config.ConfigVisitor;
7 import com.tc.object.config.DSOClientConfigHelper;
8 import com.tc.object.config.TransparencyClassSpec;
9 import com.tc.simulator.app.ApplicationConfig;
10 import com.tc.simulator.listener.ListenerProvider;
11 import com.tctest.runner.AbstractTransparentApp;
12
13 import java.awt.Color JavaDoc;
14 import java.lang.reflect.Array JavaDoc;
15 import java.lang.reflect.Field JavaDoc;
16
17 /*
18  * The test cases defined in this class is for measuring the overhead of the instrumented Field class. For correctness
19  * tests for instrumented Field class, refer to the ReflectionFieldTestApp.
20  */

21 public class ReflectionPerformanceTestApp extends AbstractTransparentApp {
22
23   private final static int COUNT = 1000000;
24
25   private final DataRoot dataRoot = new DataRoot();
26   private final DataRoot nonSharedObject = new DataRoot();
27   private final NonInstrumentedTestObject nonInstrumentedObject = new NonInstrumentedTestObject();
28
29   public ReflectionPerformanceTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
30     super(appId, cfg, listenerProvider);
31   }
32
33   public void run() {
34     reflectionFieldPerformanceTest();
35     reflectionArrayPerformanceTest();
36   }
37
38   private void reflectionArrayPerformanceTest() {
39     System.out.println("==========Performance Tests for java.lang.reflect.Array begin==========");
40     System.out.println("==========Performance Tests on Non-Instrumented Array begin==========");
41     modifyNonInstrumentedPrimitiveArrayTest();
42     System.gc();
43     modifyNonInstrumentedReferenceArrayTest();
44     System.out.println("==========Performance Tests on Non-Instrumented Array end==========");
45     System.out.println();
46     System.gc();
47
48     System.out.println("==========Performance Tests on Non-Shared Array begin==========");
49     modifyNonSharedPrimitiveTest();
50     System.gc();
51     modifyNonSharedReferenceArrayTest();
52     System.out.println("==========Performance Tests on Non-Shared Array end==========");
53     System.out.println();
54     System.gc();
55
56     System.out.println("==========Performance Tests on Shared Array begin==========");
57     modifySharedPrimitiveTest();
58     System.gc();
59     modifySharedReferenceArrayTest();
60     System.out.println("==========Performance Tests on Shared Array end==========");
61     System.out.println("==========Performance Tests for java.lang.reflect.Array end==========");
62   }
63
64   private void modifySharedPrimitiveTest() {
65     long[] longArray = dataRoot.getLongArray();
66
67     synchronized (dataRoot) {
68       long start = System.currentTimeMillis();
69       for (int i = 0; i < COUNT; i++) {
70         Array.setLong(longArray, 0, Long.MAX_VALUE);
71       }
72       long end = System.currentTimeMillis();
73       long elapsed = end - start;
74       System.out.println("Elapsed time for modifying shared primitive array: " + elapsed + "msec.");
75     }
76   }
77
78   private void modifySharedReferenceArrayTest() {
79     Object JavaDoc[] objectArray = dataRoot.getObjectArray();
80     Object JavaDoc newValue = new Object JavaDoc();
81
82     synchronized (dataRoot) {
83       long start = System.currentTimeMillis();
84       for (int i = 0; i < COUNT; i++) {
85         Array.set(objectArray, 0, newValue);
86       }
87       long end = System.currentTimeMillis();
88       long elapsed = end - start;
89       System.out.println("Elapsed time for modifying shared reference array: " + elapsed + "msec.");
90     }
91   }
92
93   private void modifyNonSharedPrimitiveTest() {
94     long[] longArray = nonSharedObject.getLongArray();
95
96     long start = System.currentTimeMillis();
97     for (int i = 0; i < COUNT; i++) {
98       Array.setLong(longArray, 0, Long.MAX_VALUE);
99     }
100     long end = System.currentTimeMillis();
101     long elapsed = end - start;
102     System.out.println("Elapsed time for modifying non shared primitive array: " + elapsed + "msec.");
103   }
104
105   private void modifyNonSharedReferenceArrayTest() {
106     Object JavaDoc[] objectArray = nonSharedObject.getObjectArray();
107     Object JavaDoc newValue = new Object JavaDoc();
108
109     long start = System.currentTimeMillis();
110     for (int i = 0; i < COUNT; i++) {
111       Array.set(objectArray, 0, newValue);
112     }
113     long end = System.currentTimeMillis();
114     long elapsed = end - start;
115     System.out.println("Elapsed time for modifying non shared reference array: " + elapsed + "msec.");
116   }
117
118   private void modifyNonInstrumentedPrimitiveArrayTest() {
119     long[] longArray = nonInstrumentedObject.getLongArray();
120     long start = System.currentTimeMillis();
121     for (int i = 0; i < COUNT; i++) {
122       Array.setLong(longArray, 0, Long.MAX_VALUE);
123     }
124     long end = System.currentTimeMillis();
125     long elapsed = end - start;
126     System.out.println("Elapsed time for modifying non instrumented primitive array: " + elapsed + "msec.");
127   }
128
129   private void modifyNonInstrumentedReferenceArrayTest() {
130     Object JavaDoc[] objectArray = nonInstrumentedObject.getObjectArray();
131     Object JavaDoc newObject = new Object JavaDoc();
132     long start = System.currentTimeMillis();
133     for (int i = 0; i < COUNT; i++) {
134       Array.set(objectArray, 0, newObject);
135     }
136     long end = System.currentTimeMillis();
137     long elapsed = end - start;
138     System.out.println("Elapsed time for modifying non instrumented reference array: " + elapsed + "msec.");
139   }
140
141   private void reflectionFieldPerformanceTest() {
142     System.out.println("==========Performance Tests for java.lang.reflect.Field begin==========");
143     System.out.println("==========Performance Tests on Non-Instrumented Objects begin==========");
144     modifyNonInstrumentedObjectTest();
145     System.gc();
146     modifyNonInstrumentedObjectReferenceTest();
147     System.gc();
148     retrieveNonInstrumentedObjectTest();
149     System.out.println("==========Performance Tests on Non-Instrumented Objects end==========");
150     System.out.println();
151     System.gc();
152
153     System.out.println("==========Performance Tests on Non-Shared Objects begin==========");
154     modifyNonSharedObjectTest();
155     System.gc();
156     modifyNonSharedObjectReferenceTest();
157     System.gc();
158     retrieveNonSharedObjectTest();
159     System.out.println("==========Performance Tests on Non-Shared Objects end==========");
160     System.out.println();
161     System.gc();
162
163     System.out.println("==========Performance Tests on Shared Objects begin==========");
164     modifySharedObjectTest();
165     System.gc();
166     modifySharedObjectReferenceTest();
167     System.gc();
168     retrieveSharedObjectTest();
169     System.out.println("==========Performance Tests on Shared Objects end==========");
170     System.out.println("==========Performance Tests for java.lang.reflect.Field end==========");
171     System.out.println();
172   }
173
174   private void modifyNonInstrumentedObjectTest() {
175     try {
176       Field JavaDoc longValueField = nonInstrumentedObject.getClass().getDeclaredField("longValue");
177       longValueField.setAccessible(true);
178       long start = System.currentTimeMillis();
179       for (int i = 0; i < COUNT; i++) {
180         longValueField.setLong(nonInstrumentedObject, Long.MAX_VALUE);
181       }
182       long end = System.currentTimeMillis();
183       long elapsed = end - start;
184       System.out.println("Elapsed time for modifying non instrumented objects: " + elapsed + "msec.");
185     } catch (IllegalAccessException JavaDoc iae) {
186       // ignore IllegalAccessException in test.
187
} catch (NoSuchFieldException JavaDoc e) {
188       // ignore NoSuchFieldException in test.
189
}
190
191   }
192
193   private void modifyNonInstrumentedObjectReferenceTest() {
194     Color JavaDoc newColor = new Color JavaDoc(200, true);
195
196     try {
197       Field JavaDoc colorField = nonInstrumentedObject.getClass().getDeclaredField("color");
198       colorField.setAccessible(true);
199       long start = System.currentTimeMillis();
200       for (int i = 0; i < COUNT; i++) {
201         colorField.set(nonInstrumentedObject, newColor);
202       }
203       long end = System.currentTimeMillis();
204       long elapsed = end - start;
205       System.out.println("Elapsed time for modifying non instrumented object reference: " + elapsed + "msec.");
206     } catch (IllegalAccessException JavaDoc iae) {
207       // ignore IllegalAccessException in test.
208
} catch (NoSuchFieldException JavaDoc e) {
209       // ignore NoSuchFieldException in test.
210
}
211
212   }
213
214   private void retrieveNonInstrumentedObjectTest() {
215     try {
216       Field JavaDoc colorField = nonInstrumentedObject.getClass().getDeclaredField("color");
217       colorField.setAccessible(true);
218       long start = System.currentTimeMillis();
219       for (int i = 0; i < COUNT; i++) {
220         colorField.get(nonInstrumentedObject);
221       }
222       long end = System.currentTimeMillis();
223       long elapsed = end - start;
224       System.out.println("Elapsed time for retrieving non instrumented objects: " + elapsed + "msec.");
225     } catch (IllegalAccessException JavaDoc iae) {
226       // ignore IllegalAccessException in test.
227
} catch (NoSuchFieldException JavaDoc e) {
228       // ignore NoSuchFieldException in test.
229
}
230
231   }
232
233   private void modifyNonSharedObjectTest() {
234     try {
235       Field JavaDoc longValueField = nonSharedObject.getClass().getDeclaredField("longValue");
236       longValueField.setAccessible(true);
237       long start = System.currentTimeMillis();
238       for (int i = 0; i < COUNT; i++) {
239         longValueField.setLong(nonSharedObject, Long.MAX_VALUE);
240       }
241       long end = System.currentTimeMillis();
242       long elapsed = end - start;
243       System.out.println("Elapsed time for modifying non shared objects: " + elapsed + "msec.");
244     } catch (IllegalAccessException JavaDoc iae) {
245       // ignore IllegalAccessException in test.
246
} catch (NoSuchFieldException JavaDoc e) {
247       // ignore NoSuchFieldException in test.
248
}
249
250   }
251
252   private void modifyNonSharedObjectReferenceTest() {
253     Color JavaDoc newColor = new Color JavaDoc(200, true);
254
255     try {
256       Field JavaDoc colorField = nonSharedObject.getClass().getDeclaredField("color");
257       colorField.setAccessible(true);
258       long start = System.currentTimeMillis();
259       for (int i = 0; i < COUNT; i++) {
260         colorField.set(nonSharedObject, newColor);
261       }
262       long end = System.currentTimeMillis();
263       long elapsed = end - start;
264       System.out.println("Elapsed time for modifying non shared object reference: " + elapsed + "msec.");
265     } catch (IllegalAccessException JavaDoc iae) {
266       // ignore IllegalAccessException in test.
267
} catch (NoSuchFieldException JavaDoc e) {
268       // ignore NoSuchFieldException in test.
269
}
270
271   }
272
273   private void retrieveNonSharedObjectTest() {
274     try {
275       Field JavaDoc colorField = nonSharedObject.getClass().getDeclaredField("color");
276       colorField.setAccessible(true);
277       long start = System.currentTimeMillis();
278       for (int i = 0; i < COUNT; i++) {
279         colorField.get(nonSharedObject);
280       }
281       long end = System.currentTimeMillis();
282       long elapsed = end - start;
283       System.out.println("Elapsed time for retrieving non shared objects: " + elapsed + "msec.");
284     } catch (IllegalAccessException JavaDoc iae) {
285       // ignore IllegalAccessException in test.
286
} catch (NoSuchFieldException JavaDoc e) {
287       // ignore NoSuchFieldException in test.
288
}
289
290   }
291
292   private void modifySharedObjectTest() {
293     synchronized (dataRoot) {
294
295       try {
296         Field JavaDoc longValueField = dataRoot.getClass().getDeclaredField("longValue");
297         longValueField.setAccessible(true);
298         long start = System.currentTimeMillis();
299         for (int i = 0; i < COUNT; i++) {
300           longValueField.setLong(dataRoot, Long.MAX_VALUE);
301         }
302         long end = System.currentTimeMillis();
303         long elapsed = end - start;
304         System.out.println("Elapsed time for modifying shared objects: " + elapsed + "msec.");
305       } catch (IllegalAccessException JavaDoc iae) {
306         // ignore IllegalAccessException in test.
307
} catch (NoSuchFieldException JavaDoc e) {
308         // ignore NoSuchFieldException in test.
309
}
310
311     }
312   }
313
314   private void modifySharedObjectReferenceTest() {
315     Color JavaDoc newColor = new Color JavaDoc(200, true);
316
317     synchronized (dataRoot) {
318
319       try {
320         Field JavaDoc colorField = dataRoot.getClass().getDeclaredField("color");
321         colorField.setAccessible(true);
322         long start = System.currentTimeMillis();
323         for (int i = 0; i < COUNT; i++) {
324           colorField.set(dataRoot, newColor);
325         }
326         long end = System.currentTimeMillis();
327         long elapsed = end - start;
328         System.out.println("Elapsed time for modifying shared object reference: " + elapsed + "msec.");
329       } catch (IllegalAccessException JavaDoc iae) {
330         // ignore IllegalAccessException in test.
331
} catch (NoSuchFieldException JavaDoc e) {
332         // ignore NoSuchFieldException in test.
333
}
334
335     }
336   }
337
338   private void retrieveSharedObjectTest() {
339     try {
340       Field JavaDoc colorField = dataRoot.getClass().getDeclaredField("color");
341       colorField.setAccessible(true);
342       long start = System.currentTimeMillis();
343       for (int i = 0; i < COUNT; i++) {
344         colorField.get(dataRoot);
345       }
346       long end = System.currentTimeMillis();
347       long elapsed = end - start;
348       System.out.println("Elapsed time for retrieving shared objects: " + elapsed + "msec.");
349     } catch (IllegalAccessException JavaDoc iae) {
350       // ignore IllegalAccessException in test.
351
} catch (NoSuchFieldException JavaDoc e) {
352       // ignore NoSuchFieldException in test.
353
}
354
355   }
356
357   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
358     String JavaDoc testClass = ReflectionPerformanceTestApp.class.getName();
359     String JavaDoc methodExpression = "* " + testClass + ".*(..)";
360     config.addWriteAutolock(methodExpression);
361     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
362     spec.addRoot("dataRoot", "dataRoot");
363     config.addIncludePattern(DataRoot.class.getName());
364   }
365
366   private static class DataRoot {
367     private long[] longArray = new long[2];
368     private Object JavaDoc[] objectArray = new Object JavaDoc[2];
369     private Color JavaDoc color = new Color JavaDoc(100, true);
370     private long longValue = Long.MIN_VALUE;
371
372     public DataRoot() {
373       super();
374     }
375
376     protected Color JavaDoc getColor() {
377       return color;
378     }
379
380     protected void setColor(Color JavaDoc color) {
381       this.color = color;
382     }
383
384     protected long getLongValue() {
385       return longValue;
386     }
387
388     protected void setLongValue(long longValue) {
389       this.longValue = longValue;
390     }
391
392     public long[] getLongArray() {
393       return longArray;
394     }
395
396     public void setLongArray(long[] longArray) {
397       this.longArray = longArray;
398     }
399
400     public Object JavaDoc[] getObjectArray() {
401       return objectArray;
402     }
403
404     public void setObjectArray(Object JavaDoc[] objectArray) {
405       this.objectArray = objectArray;
406     }
407
408   }
409
410 }
411
Popular Tags