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... :)