Matteo Merli created BOOKKEEPER-964:
---------------------------------------

             Summary: Add concurrent maps and sets for primitive types
                 Key: BOOKKEEPER-964
                 URL: https://issues.apache.org/jira/browse/BOOKKEEPER-964
             Project: Bookkeeper
          Issue Type: Improvement
            Reporter: Matteo Merli
            Assignee: Matteo Merli
             Fix For: 4.5.0


In BookKeeper there are many instances of maps and sets that use ledger id
and entry ids as keys or values. JDK concurrent collections have the overhead
of boxing all the primitive values into objects (eg: long --> Long) that would
need to be allocated from the heap. In addition to that, JDK map implementations
are closed hash tables and they will require at least one more allocation to 
hold
the linked-list/tree node.

There are already available libraries that offer primitive collections with
zero-allocation, but none of these support concurrent maps/sets.

We have added a handful of specializations, all based on the same implementation
idea. We have a hash table which is broken down into multiple sections. Each
sections, on its own, is an open hash table with linear probing, protected by
a stamped lock.

All insertions, lookups and iterations on these collections are allocation free.

{noformat}
ConcurrentLongHashMap: Map<long, Object>
ConcurrentLongHashSet: Set<long>
ConcurrentLongLongHashMap: Map<long, long>
ConcurrentLongLongPairHashMap: Map< Pair<long, long>, Pair<long, long> >
ConcurrentOpenHashMap: Map<Object, Object>
ConcurrentOpenHashSet: Set<Object>
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to