Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.63 KB | None | 0 0
  1. import org.openjdk.jmh.annotations.*;
  2. import org.openjdk.jmh.infra.Blackhole;
  3.  
  4. import java.io.Serializable;
  5. import java.util.Random;
  6. import java.util.concurrent.TimeUnit;
  7.  
  8. @State(Scope.Benchmark)
  9. public class MyBenchmark {
  10.  
  11.  
  12. private Random randomForX = new Random();
  13. private Random randomForLambda = new Random(1000);
  14. private Random randomForClazz = new Random(1000);
  15. private Random randomForPredictableClazz = new Random(1000);
  16. private Runnable anonymousRunnable;
  17. private Runnable randomAnonymousRunnable;
  18. private Runnable predictableAnonymousRunnable;
  19. private Runnable declaredRunnable;
  20. private Runnable randomDeclaredRunnable;
  21. private Runnable predictableDeclaredRunnable;
  22.  
  23. class DeclaredClazz implements Runnable, Serializable {
  24.  
  25. private final Blackhole bh;
  26. private final double stuffToConsume;
  27.  
  28. public DeclaredClazz(Blackhole bh, double stuffToConsume) {
  29. this.bh = bh;
  30. this.stuffToConsume = stuffToConsume;
  31. }
  32.  
  33. @Override
  34. public void run() {
  35. bh.consume(stuffToConsume);
  36. }
  37. }
  38.  
  39. class DeclaredClazz1 implements Runnable, Serializable {
  40.  
  41. private final Blackhole bh;
  42. private final double stuffToConsume;
  43.  
  44. public DeclaredClazz1(Blackhole bh, double stuffToConsume) {
  45. this.bh = bh;
  46. this.stuffToConsume = stuffToConsume;
  47. }
  48.  
  49. @Override
  50. public void run() {
  51. bh.consume(stuffToConsume);
  52. Blackhole.consumeCPU(1000);
  53. }
  54. }
  55.  
  56. class DeclaredClazz2 implements Runnable, Serializable {
  57.  
  58. private final Blackhole bh;
  59. private final double stuffToConsume;
  60.  
  61. public DeclaredClazz2(Blackhole bh, double stuffToConsume) {
  62. this.bh = bh;
  63. this.stuffToConsume = stuffToConsume;
  64. }
  65.  
  66. @Override
  67. public void run() {
  68. bh.consume(stuffToConsume);
  69. Blackhole.consumeCPU(2000);
  70. }
  71. }
  72.  
  73. class DeclaredClazz3 implements Runnable, Serializable {
  74.  
  75. private final Blackhole bh;
  76. private final double stuffToConsume;
  77.  
  78. public DeclaredClazz3(Blackhole bh, double stuffToConsume) {
  79. this.bh = bh;
  80. this.stuffToConsume = stuffToConsume;
  81. }
  82.  
  83. @Override
  84. public void run() {
  85. bh.consume(stuffToConsume);
  86. Blackhole.consumeCPU(3000);
  87. }
  88. }
  89.  
  90.  
  91. @Setup(Level.Invocation)
  92. public void setupAnonymousRunnable(Blackhole bh) {
  93. double x = randomForX.nextDouble() + randomForX.nextDouble();
  94. anonymousRunnable = ((Runnable & Serializable) () -> bh.consume(x));
  95. }
  96.  
  97. @Benchmark
  98. @BenchmarkMode(Mode.SampleTime)
  99. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  100. public void testAnonymousLambda(Blackhole bh) {
  101. anonymousRunnable.run();
  102. }
  103.  
  104. @Setup(Level.Invocation)
  105. public void setupRandomAnonymousRunnable(Blackhole bh) {
  106. double x = randomForX.nextDouble() + randomForX.nextDouble();
  107. switch (randomForLambda.nextInt(11)) {
  108. case 0: case 1: case 2: { randomAnonymousRunnable = ((Runnable & Serializable) () -> bh.consume(x)); break; }
  109. case 3: case 4: case 5: { randomAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(1000);}); break; }
  110. case 6: case 7: case 8: { randomAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(2000);}); break; }
  111. default: { randomAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(3000);}); break; }
  112. }
  113. }
  114.  
  115. @Benchmark
  116. @BenchmarkMode(Mode.SampleTime)
  117. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  118. public void testRandomAnonymousLambda(Blackhole bh) {
  119. randomAnonymousRunnable.run();
  120. }
  121.  
  122. @Setup(Level.Invocation)
  123. public void setupPredictableAnonymousRunnable(Blackhole bh) {
  124. double x = randomForX.nextDouble() + randomForX.nextDouble();
  125. switch (randomForLambda.nextInt(11)) {
  126. case 0: { predictableAnonymousRunnable = ((Runnable & Serializable) () -> bh.consume(x)); break; }
  127. case 1: { predictableAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(1000);}); break; }
  128. case 2: { predictableAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(2000);}); break; }
  129. default: { predictableAnonymousRunnable = ((Runnable & Serializable) () -> {bh.consume(x);Blackhole.consumeCPU(3000);}); break; }
  130. }
  131. }
  132.  
  133. @Benchmark
  134. @BenchmarkMode(Mode.SampleTime)
  135. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  136. public void testPredictableAnonymousLambda(Blackhole bh) {
  137. predictableAnonymousRunnable.run();
  138. }
  139.  
  140. @Setup(Level.Invocation)
  141. public void setupDeclaredClass(Blackhole bh) {
  142. double x = randomForX.nextDouble() + randomForX.nextDouble();
  143. declaredRunnable = new DeclaredClazz(bh, x);
  144. }
  145.  
  146. @Benchmark
  147. @BenchmarkMode(Mode.SampleTime)
  148. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  149. public void testDeclared(Blackhole bh) {
  150. declaredRunnable.run();
  151. }
  152.  
  153. @Setup(Level.Invocation)
  154. public void setupRandomClass(Blackhole bh) {
  155. double x = randomForX.nextDouble() + randomForX.nextDouble();
  156. switch (randomForClazz.nextInt(11)) {
  157. case 0: case 1: case 2: { randomDeclaredRunnable = new DeclaredClazz(bh, x); break; }
  158. case 3: case 4: case 5: { randomDeclaredRunnable = new DeclaredClazz1(bh, x); break; }
  159. case 6: case 7: case 8: { randomDeclaredRunnable = new DeclaredClazz2(bh, x); break; }
  160. default: { randomDeclaredRunnable = new DeclaredClazz3(bh, x); break; }
  161. }
  162. }
  163.  
  164. @Benchmark
  165. @BenchmarkMode(Mode.SampleTime)
  166. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  167. public void testRandomBranchingDeclared(Blackhole bh) {
  168. randomDeclaredRunnable.run();
  169. }
  170.  
  171. @Setup(Level.Invocation)
  172. public void setupPredictableClazz(Blackhole bh) {
  173. double x = randomForX.nextDouble() + randomForX.nextDouble();
  174. switch (randomForPredictableClazz.nextInt(11)) {
  175. case 0: { predictableDeclaredRunnable = new DeclaredClazz(bh, x); break; }
  176. case 1: { predictableDeclaredRunnable = new DeclaredClazz1(bh, x); break; }
  177. case 2: { predictableDeclaredRunnable = new DeclaredClazz2(bh, x); break; }
  178. default: { predictableDeclaredRunnable = new DeclaredClazz3(bh, x); break; }
  179. }
  180. }
  181.  
  182. @Benchmark
  183. @BenchmarkMode(Mode.SampleTime)
  184. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  185. public void testPredictableBranchingDeclared(Blackhole bh) {
  186. predictableDeclaredRunnable.run();
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement