title: Appropriate sizing of heap and old gen for JVM for data heavy application
body: <ul>
  <li>I am running a server application using JVM <code>sunjava-1.6.0_21</code>.</li>
  <li>My application is data heavy and acts as a cache server. So it stores a lot of long living data that we do not expect to get GC throughout the application is running. </li>
  <li>I am setting following JVM parameters <code>-Xmx16384M</code> and <code>-Xms16384M</code>. </li>
  <li>After the required data has been loaded, following is the memory usage of application</li>
  <li>Total heap space is   :<code>13969522688</code></li>
  <li>Maximum heap space is :<code>15271002112</code></li>
  <li>Free heap space is    :<code>3031718040</code></li>
  <li>Long term (old gen) heap storage:  <code>Used=10426MB Max=10922MB
  Used/Max=95%</code></li>
  </ul>
  
  <p>Old gen usage - I have confirmed that is due to actual data and is not expected to get free. 
  My question is that by default JVM sizing of heap space ( it is allocating 10922MB old gen), that is leaving very little free space in old gen section. </p>
  
  <ul>
  <li>Can less free space in old gen impact the application?</li>
  <li>If yes, how should I handle this? Should I experiment with JVM tuning parameters like <code>newratio</code> and try to increase space available for old gen or any other way I should tune the application.  </li>
  </ul>