1 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 ; 14 import java.lang.reflect.Array ; 15 import java.lang.reflect.Field ; 16 17 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 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 [] objectArray = dataRoot.getObjectArray(); 80 Object newValue = new Object (); 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 [] objectArray = nonSharedObject.getObjectArray(); 107 Object newValue = new Object (); 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 [] objectArray = nonInstrumentedObject.getObjectArray(); 131 Object newObject = new Object (); 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 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 iae) { 186 } catch (NoSuchFieldException e) { 188 } 190 191 } 192 193 private void modifyNonInstrumentedObjectReferenceTest() { 194 Color newColor = new Color (200, true); 195 196 try { 197 Field 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 iae) { 207 } catch (NoSuchFieldException e) { 209 } 211 212 } 213 214 private void retrieveNonInstrumentedObjectTest() { 215 try { 216 Field 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 iae) { 226 } catch (NoSuchFieldException e) { 228 } 230 231 } 232 233 private void modifyNonSharedObjectTest() { 234 try { 235 Field 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 iae) { 245 } catch (NoSuchFieldException e) { 247 } 249 250 } 251 252 private void modifyNonSharedObjectReferenceTest() { 253 Color newColor = new Color (200, true); 254 255 try { 256 Field 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 iae) { 266 } catch (NoSuchFieldException e) { 268 } 270 271 } 272 273 private void retrieveNonSharedObjectTest() { 274 try { 275 Field 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 iae) { 285 } catch (NoSuchFieldException e) { 287 } 289 290 } 291 292 private void modifySharedObjectTest() { 293 synchronized (dataRoot) { 294 295 try { 296 Field 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 iae) { 306 } catch (NoSuchFieldException e) { 308 } 310 311 } 312 } 313 314 private void modifySharedObjectReferenceTest() { 315 Color newColor = new Color (200, true); 316 317 synchronized (dataRoot) { 318 319 try { 320 Field 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 iae) { 330 } catch (NoSuchFieldException e) { 332 } 334 335 } 336 } 337 338 private void retrieveSharedObjectTest() { 339 try { 340 Field 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 iae) { 350 } catch (NoSuchFieldException e) { 352 } 354 355 } 356 357 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 358 String testClass = ReflectionPerformanceTestApp.class.getName(); 359 String 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 [] objectArray = new Object [2]; 369 private Color color = new Color (100, true); 370 private long longValue = Long.MIN_VALUE; 371 372 public DataRoot() { 373 super(); 374 } 375 376 protected Color getColor() { 377 return color; 378 } 379 380 protected void setColor(Color 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 [] getObjectArray() { 401 return objectArray; 402 } 403 404 public void setObjectArray(Object [] objectArray) { 405 this.objectArray = objectArray; 406 } 407 408 } 409 410 } 411
| Popular Tags
|