Who consumes more memory, ArrayList or HashSet / LinkedHashSet?
I have a very huge collection, so even relatively small memory difference can make difference.
Or the difference is minimal?
Does memory consumtion growth differently when we add more elements?
I believe that LinkedHashSet eats more memory per N elements than HashSet (to store linked-list links), but I cannot compare ArrayList to HashSet.
java collections
add a comment |
I have a very huge collection, so even relatively small memory difference can make difference.
Or the difference is minimal?
Does memory consumtion growth differently when we add more elements?
I believe that LinkedHashSet eats more memory per N elements than HashSet (to store linked-list links), but I cannot compare ArrayList to HashSet.
java collections
2
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00
add a comment |
I have a very huge collection, so even relatively small memory difference can make difference.
Or the difference is minimal?
Does memory consumtion growth differently when we add more elements?
I believe that LinkedHashSet eats more memory per N elements than HashSet (to store linked-list links), but I cannot compare ArrayList to HashSet.
java collections
I have a very huge collection, so even relatively small memory difference can make difference.
Or the difference is minimal?
Does memory consumtion growth differently when we add more elements?
I believe that LinkedHashSet eats more memory per N elements than HashSet (to store linked-list links), but I cannot compare ArrayList to HashSet.
java collections
java collections
asked Nov 15 '18 at 16:27
caasdadscaasdads
1347
1347
2
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00
add a comment |
2
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00
2
2
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00
add a comment |
1 Answer
1
active
oldest
votes
Typically, a HashMap
uses 32 bytes per entry (12 bytes header + 16 bytes data + 4 bytes padding). It will also use 4 * the capacity bytes, so when it's all said and done a HashMap
object will occupy
32 * size + 4 * capacity bytes
An ArrayList
on the other hand generally allocates 4-8 bytes per entry. This can be more however, if you allocate a bigger capacity of the ArrayList
, and only hold a few elements.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53323854%2fwho-consumes-more-memory-arraylist-or-hashset-linkedhashset%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Typically, a HashMap
uses 32 bytes per entry (12 bytes header + 16 bytes data + 4 bytes padding). It will also use 4 * the capacity bytes, so when it's all said and done a HashMap
object will occupy
32 * size + 4 * capacity bytes
An ArrayList
on the other hand generally allocates 4-8 bytes per entry. This can be more however, if you allocate a bigger capacity of the ArrayList
, and only hold a few elements.
add a comment |
Typically, a HashMap
uses 32 bytes per entry (12 bytes header + 16 bytes data + 4 bytes padding). It will also use 4 * the capacity bytes, so when it's all said and done a HashMap
object will occupy
32 * size + 4 * capacity bytes
An ArrayList
on the other hand generally allocates 4-8 bytes per entry. This can be more however, if you allocate a bigger capacity of the ArrayList
, and only hold a few elements.
add a comment |
Typically, a HashMap
uses 32 bytes per entry (12 bytes header + 16 bytes data + 4 bytes padding). It will also use 4 * the capacity bytes, so when it's all said and done a HashMap
object will occupy
32 * size + 4 * capacity bytes
An ArrayList
on the other hand generally allocates 4-8 bytes per entry. This can be more however, if you allocate a bigger capacity of the ArrayList
, and only hold a few elements.
Typically, a HashMap
uses 32 bytes per entry (12 bytes header + 16 bytes data + 4 bytes padding). It will also use 4 * the capacity bytes, so when it's all said and done a HashMap
object will occupy
32 * size + 4 * capacity bytes
An ArrayList
on the other hand generally allocates 4-8 bytes per entry. This can be more however, if you allocate a bigger capacity of the ArrayList
, and only hold a few elements.
answered Nov 15 '18 at 16:45
GBlodgettGBlodgett
10.7k42136
10.7k42136
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53323854%2fwho-consumes-more-memory-arraylist-or-hashset-linkedhashset%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
ArrayList typically uses 4-8 bytes per reference, HashSet typically uses ~32 bytes. Unless you have hundreds of millions of values, it might not make as much difference as you think.
– Peter Lawrey
Nov 15 '18 at 16:29
There are quite a few collection libraries that aim to be more memory efficient than standard java collection implementations, which you might find useful. Some examples are fastutil, Trove and Eclipse Collections
– kapex
Nov 15 '18 at 17:00