ConcurrentSkipListMap性能测试
来源:互联网 发布:二维数组赋值 编辑:程序博客网 时间:2024/06/09 14:45
package vertices;import java.util.Map;import java.util.concurrent.ConcurrentLinkedDeque;import java.util.concurrent.ConcurrentMap;import java.util.concurrent.ConcurrentSkipListMap;import org.apache.hadoop.io.FloatWritable;import org.apache.hadoop.io.IntWritable;import com.google.common.collect.Maps;/** * 注意 :ConcurrentSkipListMap和ConcurrentLinkedDeque都可以双向访问, ConcurrentSkipListMap可以将keyset进行降序遍历,ConcurrentLinkedDeque提供降序迭代器 * @author Administrator * */public class VerticesTest {public static void main(String[] args) {int VERTICES_NUMBER_0 = 400000;int VERTICES_NUMBER_1 = 1000000; //case1long start = System.currentTimeMillis(); ConcurrentMap<IntWritable, TestVertex> vertexMap0 = Maps .newConcurrentMap(); ConcurrentMap<IntWritable, TestVertex> vertexMap1 = Maps .newConcurrentMap(); for (int i = 0; i < VERTICES_NUMBER_0; i++) { vertexMap0.put(new IntWritable(i), new TestVertex( new IntWritable(i), new FloatWritable(i))); } for (int i = 0; i < VERTICES_NUMBER_1; i++) { vertexMap1.put(new IntWritable(i), new TestVertex( new IntWritable(i), new FloatWritable(i))); } System.out.println("ConcurrentMap load last " + (System.currentTimeMillis() - start) + " ms"); start = System.currentTimeMillis(); Thread t0 = new Thread(new MapWorker(vertexMap0)); Thread t1 = new Thread(new MapWorker(vertexMap1)) ; try { t0.start() ; t1.start(); t0.join() ; t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("ConcurrentMap run last " + (System.currentTimeMillis() - start) + " ms"); //case2 start = System.currentTimeMillis(); ConcurrentSkipListMap<IntWritable, TestVertex> skipMap0 = new ConcurrentSkipListMap<IntWritable, TestVertex> () ; ConcurrentSkipListMap<IntWritable, TestVertex> skipMap1 = new ConcurrentSkipListMap<IntWritable, TestVertex> () ; for (int i = 0; i < VERTICES_NUMBER_0; i++) { skipMap0.put(new IntWritable(i), new TestVertex( new IntWritable(i), new FloatWritable(i))); } for (int i = 0; i < VERTICES_NUMBER_1; i++) { skipMap1.put(new IntWritable(i), new TestVertex( new IntWritable(i), new FloatWritable(i))); } System.out.println("ConcurrentSkipListMap load last " + (System.currentTimeMillis() - start) + " ms"); start = System.currentTimeMillis(); t0 = new Thread(new MapWorker(skipMap0)); t1 = new Thread(new MapWorker(skipMap1)) ; try { t0.start() ; t1.start(); t0.join() ; t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("ConcurrentSkipListMap run last " + (System.currentTimeMillis() - start) + " ms"); //case3ConcurrentLinkedDeque<TestVertex> vertices0 = new ConcurrentLinkedDeque<TestVertex>();ConcurrentLinkedDeque<TestVertex> vertices1 = new ConcurrentLinkedDeque<TestVertex>();start = System.currentTimeMillis();for (int i = 0; i < VERTICES_NUMBER_0; i++) {vertices0.add(new TestVertex(new IntWritable(i), new FloatWritable(i)));}for (int i = 0; i < VERTICES_NUMBER_1; i++) {vertices1.add(new TestVertex(new IntWritable(i), new FloatWritable(i)));}System.out.println("ConcurrentLinkedDeque Load last "+ (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();t0 = new Thread(new DequeWorker(vertices0));t1 = new Thread(new DequeWorker(vertices1));try {t0.start();t1.start();t0.join();t1.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("ConcurrentLinkedDeque run last "+ (System.currentTimeMillis() - start) + " ms");System.out.println(vertices1.getLast().value);}}class TestVertex {IntWritable id;FloatWritable value;int flag = 0;public TestVertex(IntWritable id, FloatWritable value) {this.id = id;this.value = value;}}class MapWorker implements Runnable {ConcurrentMap<IntWritable, TestVertex> vertexMap;public MapWorker(ConcurrentMap<IntWritable, TestVertex> vertexMap) {this.vertexMap = vertexMap;}@Overridepublic void run() {for (Map.Entry<IntWritable, TestVertex> e : vertexMap.entrySet()) {TestVertex v = e.getValue();v.value.set(v.value.get() * 2);}}}class DequeWorker implements Runnable {ConcurrentLinkedDeque<TestVertex> vertices;public DequeWorker(ConcurrentLinkedDeque<TestVertex> vertices) {this.vertices = vertices;}@Overridepublic void run() {//long start = System.currentTimeMillis();for (TestVertex v : vertices) {v.value.set(v.value.get() * 2);v.flag = 1 ;}//System.out.println(Thread.currentThread().getName() + " last " + (System.currentTimeMillis() - start) + " ms" );}}
测试结果:
ConcurrentMap load last 1633 ms
ConcurrentMap run last 103 ms
ConcurrentSkipListMap load last 1178 ms
ConcurrentSkipListMap run last 38 ms
ConcurrentLinkedDeque Load last 122 ms
ConcurrentLinkedDeque run last 21 ms
阅读全文
0 0
- ConcurrentSkipListMap性能测试
- ConcurrentSkipListMap
- ConcurrentSkipListMap
- ConcurrentSkipListMap
- TreeMap、HashMap、ConcurrentSkipListMap之性能比较
- Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)
- Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)
- Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)
- Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)
- 构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached
- 构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached
- 构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached
- Java ConcurrentSkipListMap
- JDK源码学习(5)-Map的性能比较,HashMap和TreeMap,ConcurrentSkipListMap
- 性能测试
- 性能测试
- 性能测试
- 性能测试
- Html中display为inline-block的元素有内容和没有内容情况下高度不一致问题的讨论
- c++ builder 中的 XMLDocument 类详解(10) -判断节点类型: 支节点、叶节点、文本节点、空节点
- c++ builder 中的 XMLDocument 类详解(11) -读取和设置版本号
- linux基础入门之who命令
- 元素绑定事件的三种 方法
- ConcurrentSkipListMap性能测试
- iOS OC_二维码扫描、生成及长按识别
- 多数据源配置(mysql读写分离)
- 安卓高级控件3之Gallery(画廊)
- 初识消息队列——WebSphere MQ入门
- .net core mvc中使用ef
- lombok简介及使用方法
- 安卓逆向之华山杯ctf第四题:神奇的zip
- Redis简单入门