OutOfMemoryError when not actually out of memory












1















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.










share|improve this question




















  • 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


















1















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.










share|improve this question




















  • 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
















1












1








1








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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
















  • 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














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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

How to pass form data using jquery Ajax to insert data in database?

National Museum of Racing and Hall of Fame

Guess what letter conforming each word