title: Java using up far more memory than allocated with -Xmx
body: <p>I have a project I'm writing (in Java) for a class where the prof says we're not allowed to use more than 200m
  I limit the stack memory to 50m (just to be absolutely sure) with -Xmx50m but according to top, it's still using 300m</p>
  
  <p>I tried running <a href="http://www.eclipse.org/mat/" rel="noreferrer">Eclipse Memory Analyzer</a> and it reports only 26m</p>
  
  <p>Could this all be memory on the stack?, I'm pretty sure I never go further than about 300 method calls deep (yes, it is a recursive DFS search), so that would have to mean every stack frame is using up almost a megabyte which seems hard to believe.</p>
  
  <p>The program is single-threaded. Does anyone know any other places in which I might reduce memory usage?  Also, how can I check/limit how much memory the stack is using?</p>
  
  <p>UPDATE: I'm using the following JVM options now with no effect (still about 300m according to top): <code>-Xss104k -Xms40m -Xmx40m -XX:MaxPermSize=1k</code></p>
  
  <p>Another UPDATE: Actually, if I let it run a little bit longer (with all these options) about half the time it suddenly drops to 150m after 4 or 5 seconds (the other half it doesn't drop).  What makes this really strange is that my program has no stochastic (and as I said it's single-threaded) so there's no reason it should behave differently on different runs</p>
  
  <p>Could it have something to do with the JVM I'm using?</p>
  
  <pre><code>java version "1.6.0_27"
  OpenJDK Runtime Environment (IcedTea6 1.12.3) (6b27-1.12.3-0ubuntu1~10.04)
  OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
  </code></pre>
  
  <p>According to java -h, the default JVM is -server.  I tried adding -cacao and now (with all the other options) it's only 59m.  So I suppose this solves my problem.  Can anyone explain why this was necessary?  Also, are there any drawbacks I should know about?</p>
  
  <p>One more update: cacao is really really slow compared to server.  This is an awful option</p>