Calculating storage requirements for JVM servers
To run a JVM server successfully in a CICS region, you must ensure that enough free z/OS storage is available for both the JVM and its deployed applications to use.
Before you begin
You must have knowledge of z/OS storage (see Understanding a z/OS address space) and how CICS uses z/OS storage. For details, see CICS virtual storage: An overview, What CICS uses virtual storage for, and JVM storage.
About this task
The storage that is required for a JVM server, and the Java applications in it, does not come from CICS-managed storage areas such as the DSA, EDSA, or GDSA. Some storage areas are managed by the Language Environment handling requests, such as malloc() issued by C® code. The remaining storage areas are managed directly by the JVM, by using z/OS storage management requests such as IARV64. Both of these storage area management types use storage from the available private areas.
- At least 512K of unallocated 24-bit z/OS® storage
- At least 256K of contiguous area available in unallocated 24-bit z/OS storage
- At least 32,768K of unallocated 31-bit z/OS storage
- At least 1G of unallocated 64-bit z/OS storage
In addition, CICS cannot use its short-on-storage mechanism when user region storage is running low.
- Java heap
- Loading of Java classes
- JIT compilation caches
- Native stack
- Java monitors
- Java threads
- UNIX shared libraries
The Java heap is a contiguous pre-allocated block of 64-bit storage that is used to store the runtime data area for all objects and arrays. It is managed by the JVM garbage collection process, and its size can only be modified if the JVM is restarted. The other JVM storage areas are more dynamic in size and their size can vary depending on usage. In addition to the storage areas that are allocated by the JVM, you must also consider other components that use private area and interact with the JVM such as JDBC type 2 drivers, IBM® MQ Java adapter, or third-party tools.
To estimate the amount of storage used by the JVM in the different private areas, you can use the following procedure.
Procedure
What to do next
Set your Java memory limits based on the estimate you got. For instructions, see Setting the memory limits for Java.