1 package org.simantics.db.impl;
\r
3 import java.util.ArrayList;
\r
4 import java.util.concurrent.BlockingQueue;
\r
5 import java.util.concurrent.ConcurrentLinkedQueue;
\r
6 import java.util.concurrent.CountDownLatch;
\r
7 import java.util.concurrent.LinkedBlockingQueue;
\r
8 import java.util.concurrent.atomic.AtomicInteger;
\r
9 import java.util.concurrent.locks.ReentrantLock;
\r
11 public class PerformanceTests {
\r
14 public static void collectionTest1() {
\r
16 final BlockingQueue<Object> queue = new LinkedBlockingQueue<Object>();
\r
17 final CountDownLatch latch1 = new CountDownLatch(9);
\r
18 final CountDownLatch latch2 = new CountDownLatch(9);
\r
20 class T extends Thread {
\r
27 } catch (InterruptedException e) {
\r
28 e.printStackTrace();
\r
30 for(int i=0;i<500000;i++) queue.add(this);
\r
34 } catch (InterruptedException e) {
\r
35 e.printStackTrace();
\r
42 for(int i=0;i<8;i++) new T().start();
\r
47 long start = System.nanoTime();
\r
50 long done = System.nanoTime() - start;
\r
51 System.out.println("took " + 1e-9*done);
\r
52 start = System.nanoTime();
\r
53 ArrayList<Object> sink = new ArrayList<Object>();
\r
54 queue.drainTo(sink);
\r
55 done = System.nanoTime() - start;
\r
56 System.out.println("took " + 1e-9*done);
\r
58 } catch (InterruptedException e) {
\r
59 e.printStackTrace();
\r
64 public static void collectionTest2() {
\r
66 final ConcurrentLinkedQueue<Object> queue = new ConcurrentLinkedQueue<Object>();
\r
67 final CountDownLatch latch1 = new CountDownLatch(9);
\r
68 final CountDownLatch latch2 = new CountDownLatch(9);
\r
70 class T extends Thread {
\r
77 } catch (InterruptedException e) {
\r
78 e.printStackTrace();
\r
80 for(int i=0;i<500000;i++) queue.add(this);
\r
84 } catch (InterruptedException e) {
\r
85 e.printStackTrace();
\r
92 for(int i=0;i<8;i++) new T().start();
\r
97 long start = System.nanoTime();
\r
100 long done = System.nanoTime() - start;
\r
101 System.out.println("took " + 1e-9*done);
\r
102 start = System.nanoTime();
\r
103 ArrayList<Object> sink = new ArrayList<Object>();
\r
104 for(Object o : queue) sink.add(o);
\r
105 done = System.nanoTime() - start;
\r
106 System.out.println("took " + 1e-9*done);
\r
108 } catch (InterruptedException e) {
\r
109 e.printStackTrace();
\r
114 public static void collectionTest3() {
\r
116 final ArrayList<Object> queue = new ArrayList<Object>();
\r
117 final CountDownLatch latch1 = new CountDownLatch(9);
\r
118 final CountDownLatch latch2 = new CountDownLatch(9);
\r
120 class T extends Thread {
\r
123 public void run() {
\r
125 latch1.countDown();
\r
127 } catch (InterruptedException e) {
\r
128 e.printStackTrace();
\r
130 for(int i=0;i<500000;i++) {
\r
131 synchronized(queue) {
\r
136 latch2.countDown();
\r
138 } catch (InterruptedException e) {
\r
139 e.printStackTrace();
\r
146 for(int i=0;i<8;i++) new T().start();
\r
149 latch1.countDown();
\r
151 long start = System.nanoTime();
\r
152 latch2.countDown();
\r
154 long done = System.nanoTime() - start;
\r
155 System.out.println("took " + 1e-9*done);
\r
156 start = System.nanoTime();
\r
157 ArrayList<Object> sink = new ArrayList<Object>();
\r
158 sink.addAll(queue);
\r
159 done = System.nanoTime() - start;
\r
160 System.out.println("took " + 1e-9*done);
\r
162 } catch (InterruptedException e) {
\r
163 e.printStackTrace();
\r
168 public static void collectionTest4() {
\r
170 final ArrayList<Object> queue = new ArrayList<Object>();
\r
171 final CountDownLatch latch1 = new CountDownLatch(9);
\r
172 final CountDownLatch latch2 = new CountDownLatch(9);
\r
173 final ReentrantLock lock = new ReentrantLock();
\r
174 final ReentrantLock lock2 = new ReentrantLock();
\r
176 class T extends Thread {
\r
179 public void run() {
\r
181 latch1.countDown();
\r
183 } catch (InterruptedException e) {
\r
184 e.printStackTrace();
\r
186 for(int i=0;i<500000;i++) {
\r
193 latch2.countDown();
\r
195 } catch (InterruptedException e) {
\r
196 e.printStackTrace();
\r
203 for(int i=0;i<8;i++) new T().start();
\r
206 latch1.countDown();
\r
208 long start = System.nanoTime();
\r
209 latch2.countDown();
\r
211 long done = System.nanoTime() - start;
\r
212 System.out.println("took " + 1e-9*done);
\r
213 start = System.nanoTime();
\r
214 ArrayList<Object> sink = new ArrayList<Object>();
\r
215 sink.addAll(queue);
\r
216 done = System.nanoTime() - start;
\r
217 System.out.println("took " + 1e-9*done);
\r
219 } catch (InterruptedException e) {
\r
220 e.printStackTrace();
\r
225 public static void counterTest1() {
\r
227 final CountDownLatch latch1 = new CountDownLatch(9);
\r
228 final CountDownLatch latch2 = new CountDownLatch(9);
\r
229 final AtomicInteger integer = new AtomicInteger();
\r
231 class T extends Thread {
\r
234 public void run() {
\r
236 latch1.countDown();
\r
238 } catch (InterruptedException e) {
\r
239 e.printStackTrace();
\r
241 for(int i=0;i<500000;i++) {
\r
242 integer.incrementAndGet();
\r
245 latch2.countDown();
\r
247 } catch (InterruptedException e) {
\r
248 e.printStackTrace();
\r
255 for(int i=0;i<8;i++) new T().start();
\r
258 latch1.countDown();
\r
260 long start = System.nanoTime();
\r
261 latch2.countDown();
\r
263 long done = System.nanoTime() - start;
\r
264 System.out.println("took " + 1e-9*done);
\r
266 } catch (InterruptedException e) {
\r
267 e.printStackTrace();
\r
272 static int counter = 0;
\r
274 public static void counterTest2() {
\r
276 final CountDownLatch latch1 = new CountDownLatch(9);
\r
277 final CountDownLatch latch2 = new CountDownLatch(9);
\r
278 final ReentrantLock lock = new ReentrantLock();
\r
280 class T extends Thread {
\r
283 public void run() {
\r
285 latch1.countDown();
\r
287 } catch (InterruptedException e) {
\r
288 e.printStackTrace();
\r
290 for(int i=0;i<500000;i++) {
\r
296 latch2.countDown();
\r
298 } catch (InterruptedException e) {
\r
299 e.printStackTrace();
\r
306 for(int i=0;i<8;i++) new T().start();
\r
309 latch1.countDown();
\r
311 long start = System.nanoTime();
\r
312 latch2.countDown();
\r
314 long done = System.nanoTime() - start;
\r
315 System.out.println("took " + 1e-9*done);
\r
317 } catch (InterruptedException e) {
\r
318 e.printStackTrace();
\r
323 public static void counterTest3() {
\r
325 final CountDownLatch latch1 = new CountDownLatch(9);
\r
326 final CountDownLatch latch2 = new CountDownLatch(9);
\r
327 //final ReentrantLock lock = new ReentrantLock();
\r
329 class T extends Thread {
\r
332 public void run() {
\r
334 latch1.countDown();
\r
336 } catch (InterruptedException e) {
\r
337 e.printStackTrace();
\r
339 for(int i=0;i<500000;i++) {
\r
345 latch2.countDown();
\r
347 } catch (InterruptedException e) {
\r
348 e.printStackTrace();
\r
355 for(int i=0;i<8;i++) new T().start();
\r
358 latch1.countDown();
\r
360 long start = System.nanoTime();
\r
361 latch2.countDown();
\r
363 long done = System.nanoTime() - start;
\r
364 System.out.println("took " + 1e-9*done);
\r
366 } catch (InterruptedException e) {
\r
367 e.printStackTrace();
\r
372 public static void main(String[] args) {
\r
373 // collectionTest1();
\r
374 // collectionTest2();
\r
375 // collectionTest3();
\r
376 // collectionTest4();
\r