I need help understanding how the GC-related numbers I'm getting from jmap and jstat relate to the settings I'm passing to java. I'm starting the app (solr) with the following settings on a sever with 16GB of memory:

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled 
-Xms12144m -Xmx12144m 
-XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops

The output of jmap begins:

Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 12733906944 (12144.0MB)
   NewSize          = 2686976 (2.5625MB)
   MaxNewSize       = 130809856 (124.75MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 4
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 176160768 (168.0MB)

Why are NewSize, MaxNewSize, OldSize, and PermSize all so small, when the MaxHeapSize is large? Shouldn't NewSize + OldSize = heap size? And shouldn't the overall heap size be approaching MaxHeapSize? Why is NewSize exactly half of OldSize when the NewRatio is set to 4?

The rest of the jmap output is below. It matches the above, and includes a section concurrent mark-sweep generation which I also don't know how to interpret.

Additionally, the GC logs indicate that the "desired survivor size" is 6.2MB, which is also strange given I understand -XX:SurvivorRatio=8 should make the survivor space 1/8 of NewSize.

Finally, I only ever see ParNew messages in my GC log, which I understand is the GC for Eden.


Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 117768192 (112.3125MB)
   used     = 20402232 (19.45708465576172MB)
   free     = 97365960 (92.8554
Edit
Report