• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Liutauras Vilda
  • Henry Wong
  • Devaka Cooray
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Al Hobbs
  • Carey Brown
Bartenders:
  • Piet Souris
  • Mikalai Zaikin
  • Himai Minh

Linux/Java Memory Leak question

 
Ranch Hand
Posts: 145
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,

When we start a java program with the -Xmx=1024m option on a machine with 4GB of RAM, is it possible for the java process to cause a memory leak, such that the entire 4GB is used up? Won't it throw an java.lang.OutOfMemory error, rather than try to allocate memory outside the 1024m limit?

Thanks.
Mathew
 
Saloon Keeper
Posts: 25827
184
Android Eclipse IDE Tomcat Server Redhat Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
It should. Otherwise what's the point in having a memory limit option on the JVM?
 
author
Posts: 5856
7
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The -Xmx value is not the memory limit on the java task, it is only the maximum allowed heap size. The java process also uses memory for:
a) the permanent generation (class-level data)
b) The thread stacks
c) The C/C++ data structures used internally by the JVM
d) The DLLs/SOs loaded by the java process
e) The JIT-compiled code
f) The file handles (and other OS data structures) used by the process (not sure which command you are using to see the memory usages, and I'm not sure which commands include this in their totals)

Also note that while item 'd' is shared by all java processes, commands like top report the memory for every process, thus counting some memory twice. There was a long discussion on this topic several years ago in this forum, let me see if I can find it. Found it:
https://coderanch.com/t/111262/Linux-UNIX/read-memory-usage-process-running

Thus you can end up using much more memory than the 1GB you allocated for the heap.
 
Tim Holloway
Saloon Keeper
Posts: 25827
184
Android Eclipse IDE Tomcat Server Redhat Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Peter Johnson wrote:
Thus you can end up using much more memory than the 1GB you allocated for the heap.



Ouch! didn't realize that generated code didn't count. Makes me long for the old mainframe fixed region sizes.
reply
    Bookmark Topic Watch Topic
  • New Topic