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)