This short article will provide you with a high level overview of the different Java memory spaces for the IBM VM.
This understanding is quite important given the implementation & naming convention differences between HotSpot & IBM VM.
IBM VM: 2 different memory spaces
The IBM VM memory is split between 2 memory spaces:
- The Java Heap (nursery and tenured spaces)
- The Native Heap (C-Heap)
Start-up arguments and tuning
-Xmx (maximum Heap space)
-Xms (minimum Heap size)
GC policy Ex:
-Xgcpolicy:gencon (enable gencon GC policy)
- verbose GC
- JMX API
- IBM monitoring tools
The IBM Java Heap is typically split between the nursery and tenured space (YoungGen, OldGen).
The gencon GC policy (combo of concurrent and generational GC) is typically used for Java EE platforms in order to minimize the GC pause time.
Not configurable directly.
For a 32-bit VM, the C-Heap capacity = 4 Gig – Java Heap
For a 64-bit VM, the C-Heap capacity = Physical server total RAM & virtual memory – Java Heap
- svmon command
The C-Heap is storing class metadata objects including library files, other JVM and third party native code objects.
Where is the PermGen space?
This is by far the most typical question I get from Java EE support individuals supporting an IBM VM environment for this first time. The answer: there is no PermGen space for the IBM VM. The PermGen space is only applicable to the HotSpot VM. The IBM VM is using the Native Heap for Class metadata related data. Also, as you probably saw from my other article, Oracle / Sun is also starting to remove the PermGen space for the HotSpot VM.
The next article will provide you a tutorial on how to enable and analyze verbose GC for an IBM VM. Please feel free to post any comment or question on the IBM VM.