OutOfMemoryError when not actually out of memory
I've got a javaws (JNLP) app that will occasionally give
java.lang.OutOfMemoryError: Java heap space
but right after it happened the customer hit "m" in the console (to get memory usage) and "g" (to trigger an manual full GC) and I see
Memory: 1,013,632K Free: 167,815K (16%) ... completed.
Garbage collect ... completed.
Memory: 1,013,632K Free: 760,924K (75%) ... completed.
which to me looks like plenty of free memory even before the GC and tons after. I've already doubled the memory from what it had before (which was plenty in most cases). The stacktrace is different each time. Can anyone suggest what might cause this and how to fix it?
This is not a duplicate of the other OutOfMemoryError questions! Those are pretty generic, this is asking specifically about a strange case where we seem to get the error when not actually out of memory.
java out-of-memory java-web-start jnlp
add a comment |
I've got a javaws (JNLP) app that will occasionally give
java.lang.OutOfMemoryError: Java heap space
but right after it happened the customer hit "m" in the console (to get memory usage) and "g" (to trigger an manual full GC) and I see
Memory: 1,013,632K Free: 167,815K (16%) ... completed.
Garbage collect ... completed.
Memory: 1,013,632K Free: 760,924K (75%) ... completed.
which to me looks like plenty of free memory even before the GC and tons after. I've already doubled the memory from what it had before (which was plenty in most cases). The stacktrace is different each time. Can anyone suggest what might cause this and how to fix it?
This is not a duplicate of the other OutOfMemoryError questions! Those are pretty generic, this is asking specifically about a strange case where we seem to get the error when not actually out of memory.
java out-of-memory java-web-start jnlp
4
but right after it- that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.
– rkosegi
Nov 20 '18 at 20:03
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
1
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44
add a comment |
I've got a javaws (JNLP) app that will occasionally give
java.lang.OutOfMemoryError: Java heap space
but right after it happened the customer hit "m" in the console (to get memory usage) and "g" (to trigger an manual full GC) and I see
Memory: 1,013,632K Free: 167,815K (16%) ... completed.
Garbage collect ... completed.
Memory: 1,013,632K Free: 760,924K (75%) ... completed.
which to me looks like plenty of free memory even before the GC and tons after. I've already doubled the memory from what it had before (which was plenty in most cases). The stacktrace is different each time. Can anyone suggest what might cause this and how to fix it?
This is not a duplicate of the other OutOfMemoryError questions! Those are pretty generic, this is asking specifically about a strange case where we seem to get the error when not actually out of memory.
java out-of-memory java-web-start jnlp
I've got a javaws (JNLP) app that will occasionally give
java.lang.OutOfMemoryError: Java heap space
but right after it happened the customer hit "m" in the console (to get memory usage) and "g" (to trigger an manual full GC) and I see
Memory: 1,013,632K Free: 167,815K (16%) ... completed.
Garbage collect ... completed.
Memory: 1,013,632K Free: 760,924K (75%) ... completed.
which to me looks like plenty of free memory even before the GC and tons after. I've already doubled the memory from what it had before (which was plenty in most cases). The stacktrace is different each time. Can anyone suggest what might cause this and how to fix it?
This is not a duplicate of the other OutOfMemoryError questions! Those are pretty generic, this is asking specifically about a strange case where we seem to get the error when not actually out of memory.
java out-of-memory java-web-start jnlp
java out-of-memory java-web-start jnlp
edited Nov 21 '18 at 23:45
dlipofsky
asked Nov 20 '18 at 19:43
dlipofskydlipofsky
101211
101211
4
but right after it- that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.
– rkosegi
Nov 20 '18 at 20:03
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
1
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44
add a comment |
4
but right after it- that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.
– rkosegi
Nov 20 '18 at 20:03
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
1
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44
4
4
but right after it - that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.– rkosegi
Nov 20 '18 at 20:03
but right after it - that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.– rkosegi
Nov 20 '18 at 20:03
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
1
1
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44
add a comment |
0
active
oldest
votes
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%2f53400430%2foutofmemoryerror-when-not-actually-out-of-memory%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f53400430%2foutofmemoryerror-when-not-actually-out-of-memory%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
4
but right after it- that's key. JVM failed to allocate block and throw an exception. No memory from that attempt is actually allocated.Triggering GC has no effect to it (if OOM is thrown, JVM already did all its best to reclaim space). I guess that your app is trying to allocate huge block which is over heap limit.– rkosegi
Nov 20 '18 at 20:03
It doesn't look like the JVM tried to do a GC, since a GC immediately after was able to reclaim most of the space (by your theory, the space for the failed malloc would be accounted for even in the line before the GC). And I don't believe my app was trying to allocate a huge block, especially since I have seen the OOM occur in totally unrelated parts of the code.
– dlipofsky
Nov 20 '18 at 21:13
1
Likely the unwinding of the stack until that OutOfMemoryException was caught and printed makes enough objects eligible for garbage collection, while they previously were not. Use a profiler to record and analyse your memory usage.
– Mark Rotteveel
Nov 23 '18 at 18:44