Java HashMap Size

H

hrpreet

What can be maxium capacity of a HashMap so that performance of code is
not effected.Is it ok to store lackhs of data in a HashMap.If not then
which java collection is suitable for storing this large a data.
 
N

NullBock

Looking at the source, it looks like HashMap needs about 16 + 4 *
(loadfactor) bytes per entry, plus a few bytes. Each bucket has four
fields, each field using four bytes. The pointer to the bucket is also
necessary, and since it's hashed, there are more bucket pointers than
actual buckets. This really isn't very many, and is probably dwarfed
by the memory need for the items being stored. (IE, a simple string
can use hundreds of bytes.)

In any case, the upper limit for a hash table is the JVM memory
allocation, so even gargantuan hash maps shouldn't be a problem. And
the great thing about hash maps is, even if they are gargantuan (ie,
millions of entries), the access time is still very fast.

Walter Gildersleeve
Freiburg, Germany
____________________________________________________
http://linkfrog.net
URL Shortening
Free and easy, small and green.
 
T

Thomas Hawtin

NullBock said:
Looking at the source, it looks like HashMap needs about 16 + 4 *
(loadfactor) bytes per entry, plus a few bytes. Each bucket has four
fields, each field using four bytes. The pointer to the bucket is also
necessary, and since it's hashed, there are more bucket pointers than
actual buckets. This really isn't very many, and is probably dwarfed
by the memory need for the items being stored. (IE, a simple string
can use hundreds of bytes.)

It uses a bit more memory than this. Each object has (typically) a
pointer to the class information, a hash code and bits for use in
synchronisation and for garbage collection. Also on 64-bit systems, the
reference size will be doubled.

You could write a hash map with the entries inlined into the main array,
but it would tend to make any operation using Map.Entry slow.

The map may be many-to-one and the key may be shared or small, so memory
may be an issue in some obscure cases. A more likely (but still
unlikely) problem is GC pauses, particular if entries are medium lived.
In any case, the upper limit for a hash table is the JVM memory
allocation, so even gargantuan hash maps shouldn't be a problem. And
the great thing about hash maps is, even if they are gargantuan (ie,
millions of entries), the access time is still very fast.

Yup, because the table grows, the number of entries necessary to sort
through on every access remains very small.

Tom Hawtin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,522
Members
44,995
Latest member
PinupduzSap

Latest Threads

Top