Java: multi-threaded maps: how do the implementations compare?

hashmap, java, multithreading

Solution

`Collections.synchronizedMap()` simply makes all the `Map` methods `synchronized`.

`ConcurrentMap` is really the interface you want and there are several implementations (eg `ConcurrentHashMap`, `ConcurrentSkipList`). It has several operations that `Map` doesn't that are important for threadsafe operations. Plus it is more granular than a synchronized `Map` as an operation will only lock a slice of the backing data structure rather than the entire thing.

Problem

I'm looking for a good hash map implementation. Specifically, one that's good for creating a large number of maps, most of them small. So memory is an issue. It should be thread-safe (though losing the odd put might be an OK compromise in return for better performance), and fast for both get and put. And I'd also like the moon on a stick, please, with a side-order of justice. The options I know are: HashMap. Disastrously un-thread safe. ConcurrentHashMap. My first choice, but this has a hefty memory footprint - about 2k per instance. Collections.sychronizedMap(HashMap). That's working OK for me, but I'm sure there must be faster alternatives. Trove or Colt - I think neither of these are thread-safe, but perhaps the code could be adapted to be thread safe. Any others? Any advice on what beats what when? Any really good new hash map algorithms that Java could use an implementation of? Thanks in advance for your input!

Original source