天天看點

Java實作緩存之HashMap及ConcurrentHashMap

最近,在一個項目中需要将大量的鍵值對資料緩存在記憶體中,以提高系統的業務處理能力。将資料緩存在記憶體中的方法有很多,可以使用諸如Memcached之類的分布式記憶體對象緩存系統,也可以通過持有對象Map類自行實作資料緩存。如何選擇取決于業務需求,下面為采用map實作資料緩存前做準備時了解到的一些問題。

1、java的HashMap高并發問題。

   在高并發的情況下,HashMap可能會出現卡死的情況,原因是HashMap屬于非線程安全的,具體的分析可以參看第三點。

   出現高并發操作HashMap的,最好改用ConcurrentHashMap代替,兩者的性能比較可參看第二點。

2、HashMap和ConcurrentHashMap的并發性能。

   ConcurrentHashMap的性能比同步的HashMap快一倍左右,同步的HashMap和Hashtable的性能相當。

   測試資料參見:http://blog.csdn.net/java2000_net/article/details/3373181

3、不正當使用HashMap導緻cpu 100%的問題追究。

   過程參見:http://code.alibabatech.com/blog/dev_related_969/hashmap-result-in-improper-use-cpu-100-of-the-problem-investigated.html