如何高效的实现一个计数器map(四)

2014-11-24 11:20:10 · 作者: · 浏览: 10
73: Time used: 124 ms
74: ====TestForNullTest Case
75: start at 1358655703210
76: Time used: 118 ms
77: ====AtomicLongTest Case
78: start at 1358655703329
79: Time used: 240 ms
80: ====TroveTest Case
81: start at 1358655703569
82: Time used: 102 ms
83: ====MutableIntTest Case
84: start at 1358655703671
85: Time used: 45 ms
86: ====Guava AtomicLongMapTest Case
87: start at 1358655703716
88: Time used: 126 ms
89: ====Guava HashMultiSetTest Case
90: start at 1358655703842
91: Time used: 98 ms
92: ------------------------
一般结论:单线程使用MutableInt,多线程使用guava的AtomicLongMap,其实可以看看guava对addAndGet的实现,循环,很有趣。
最后总结一下,我们在对这个问题做优化的时候,明显的思路就是减少方法调用,而MutableInt效率最高,明显的是它将方法调用减少到最小——1次get,指针的威力顿时显现。当然实际业务代码实现的时候还要考虑到多个因素,比如代码可读性,与业务结合等等,我们现实中不一定要追求如此的效率,但是也要避免毫无思考的写下baseline里的代码,因为明显是可优化的,why not?