Is there a HashMap implementation in Java that produces no garbage?

collections, hashmap, hashtable, java, real-time

Solution

We have also written a collection of data structures called CoralBits that provides high-performance with zero garbage creation. It re-uses iterators and pools map entry objects. For maps that use primitives as keys, we wrote `IntMap` and `LongMap`. For a general purpose map we wrote `PooledHashMap` which implements `java.util.Map` so you can swap in your code for zero garbage.

Trove and Javolution are other alternatives but we have found that Javolution creates garbage in some situations.

CoralBits also provides a MemorySampler instrumentation class that you can use to find out where garbage is being created in your code. In the case of a `java.util.HashMap` the culprit is:

java.util.HashMap.createEntry(HashMap.java:901)

You can take a look in this article written by me that gives an example of how to use MemorySampler to detect garbage in your applications.

Disclaimer: I am one of the developers of CoralBits.

Problem

It came to my attention that `java.util.HashMap` produces garbage for the GC when used on my high-performance system, which basically is a selector reading from the network. Is there an alternative to `java.util.HashMap` (i.e. does not even need to implement `java.util.Map`, in other words, it can have its own API) that I can use that will leave no garbage behind? GARBAGE = objects that go out of scope and will have to be collected by the GC. For @durron597: ``` public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); while(true) { map.put("foo1", "bah1"); map.put("foo2", "bah2"); map.remove("foo1"); Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()) { iter.next(); } } } ``` Now run that with -verbose:gc and see what happens... :)

Original source

Related problems