同步和异步集合的性能测试,异步集合性能测试,package cn.o
分享于 点击 24245 次 点评:164
同步和异步集合的性能测试,异步集合性能测试,package cn.o
package cn.outofmemory.snippets.core;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Vector;import java.util.concurrent.TimeUnit;public class CollectionExample { static int loops; public static void main(String[] args) { loops = 10; performTest(new Vector()); performTest(new ArrayList()); performTest(Collections.synchronizedList(new ArrayList())); System.out.println("Synchronized Vector test"); cleanGCollect(); Timestamp timSTM = new Timestamp(); performTest(new Vector()); timSTM.stop(); System.out.println("Test took " + timSTM); System.out.println("Unsynchronized vector test"); cleanGCollect(); Timestamp timeSTMUnsync = new Timestamp(); timeSTMUnsync.stop(); System.out.println("Test took " + timeSTMUnsync); double gained = ((double) (timSTM.elapsedTime() - timeSTMUnsync.elapsedTime())) / loops; System.out.println("Unsynchronized operation saves " + gained + " " + timSTM.units() + " per call"); System.out.println("Synchronized arraylist test"); cleanGCollect(); timSTM = new Timestamp(); performTest(Collections.synchronizedList(new ArrayList())); timSTM.stop(); System.out.println("Test took " + timSTM); System.out.println("Unsynchronized arraylist test"); cleanGCollect(); timeSTMUnsync = new Timestamp(); performTest(new ArrayList()); timeSTMUnsync.stop(); System.out.println("Test took " + timeSTMUnsync); gained = ((double) (timSTM.elapsedTime() - timeSTMUnsync.elapsedTime())) / loops; System.out.println("Unsynchronized operation saves " + gained + " " + timSTM.units() + " per call"); } static void cleanGCollect() { System.gc(); System.runFinalization(); System.gc(); } static void performTest(List l) { Integer integer = new Integer(0); for (int i = 0; i < loops; i++) { l.add(integer); } }}class Timestamp { private long start; private long stop; private boolean stopped = false; private TimeUnit timeUnit; public Timestamp() { this(TimeUnit.NANOSECONDS); } public Timestamp(TimeUnit units) { this.timeUnit = units; start(); } public void start() { start = System.nanoTime(); stopped = false; } public void stop() { stop = System.nanoTime(); stopped = true; } public long elapsedTime() { if (!stopped) { throw new IllegalStateException("Error while stoping timestamp"); } return timeUnit.convert(stop - start, TimeUnit.NANOSECONDS); } @Override public String toString() { try { return elapsedTime() + " " + timeUnit; } catch (IllegalStateException ex) { return " Timestamp didn't stop"; } } public String units() { return timeUnit.toString(); }}
输出:
Synchronized Vector testTest took 6187 NANOSECONDSUnsynchronized vector testTest took 309 NANOSECONDSUnsynchronized operation saves 587.8 NANOSECONDS per callSynchronized arraylist testTest took 8354 NANOSECONDSUnsynchronized arraylist testTest took 5878 NANOSECONDSUnsynchronized operation saves 247.6 NANOSECONDS per call
用户点评