Background

Background

SICS is programmed in Java. The SICS programs are compiled into so-called Java byte code format. The SICS Java byte codes are grouped into a number of compressed files called jars. These jars constitute the main part of a SICS installation.

In order to run SICS, one must start a Java Virtual Machine (JVM), a computer program in its own right, and tell it where the Java byte code for SICS is stored, i.e. where the jars are stored.

The JVM will execute the byte code instructions from the jars and this results in the SICS behavior we are used to seeing.

The JVM needs memory for itself, for the Java Runtime Environment libraries (JRE), for the SICS byte codes, and for data that SICS works on (most of it related to the SICS database).

This version of SICS requires 64-bit Java 17. It will not run with Java versions prior to 17, nor will it run with 32-bit Java.

The JVM needs to know in advance (i.e. when being started) how much virtual memory to reserve for data (the ‘heap’ memory area). This is just a fact, related to how the JVM itself is constructed (by Oracle, IBM, Amazon, others), and not related to how SICS is programmed. It is important to understand that this value must be pre-set, and that the JVM cannot expand heap memory dynamically.

Starting with Java 8, the PermGen memory setting (used with Java 7 and earlier) is no longer relevant. PermGen memory has been replaced with so called MetaSpace memory. This is allocated automatically by the JVM and does not need to be tuned or set before starting the JVM. The heap size still has to be set before starting the JVM.

The JVM parameters relevant for SICS are described in Appendix C of the SICS Installation Guide document.

This document covers in more detail the memory size parameter that define the maximum “heap” size. The JRE command line parameter for setting this limit is -Xmx.