欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

同步和异步集合的性能测试,异步集合性能测试,package cn.o

来源: javaer 分享于  点击 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
相关栏目:

用户点评