ODS Graphics uses Java
technology to produce its graphs. Most of the time this fact is transparent
to you because the required Java Runtime Environment (JRE) and Jar
files are included with SAS software installation and the Java environment
is automatically started and stopped for you. When Java is started,
it allocates a fixed amount of memory that can grow up to the value
set for the
-Xmx
suboption
in the JREOPTIONS option (discussed in a moment). This memory is independent
of the memory limit that SAS sets for the SAS session with its MEMSIZE=
option.
Normally, the memory
limit for Java is sufficient for most ODS Graphics applications. However,
some tasks are very memory intensive and might exhaust all available
Java memory, resulting in an OutOfMemoryError condition. You might
encounter Java memory limitations when
-
the product of the output size
and the DPI setting results in very large output
-
a classification panel has a very
large number of classifier crossings
-
a scatterplot matrix has a large
number of variables
-
creating 3-D plots and 2-D contours,
which are memory intensive to generate
-
a plot has a very large number
of marker labels
-
a plot uses many character variables
or has a large number of GROUP values
-
using the SG Editor to edit a graph
with a large amount of data.
If you encounter a Java
OutOfMemoryError, you can try executing your program again by restarting
SAS and specifying a larger amount of memory for Java at SAS invocation.
To determine what the
current Java memory settings are, you can submit a PROC OPTIONS statement
that will show the value of the JREOPTIONS option:
proc options option=jreoptions;
run;
After you submit this
procedure code, a list of JREOPTIONS settings is displayed in the
SAS log. The JREOPTIONS option has many suboptions that configure
the SAS Java environment. Many of the suboptions are installation
and host specific and should not be modified, especially the ones
that provide installed file locations. For managing memory, look for the
-Xms
and
-Xmx
suboptions:
Use this option to
set the minimum Java memory (heap) size, in bytes. Set this value
to a multiple of 1024 greater than 1MB. Append the letter k or K to
indicate kilobytes, or m or M to indicate megabytes. The default is
2MB. Examples:
-Xms6291456
-Xms6144k
-Xms6m
Use this option to
set the maximum size, in bytes, of the memory allocation pool. Set
this value to a multiple of 1024 greater than 2MB. Append the letter
k or K to indicate kilobytes, or m or M to indicate megabytes. The
default is 64MB. Examples:
-Xmx83886080
-Xmx81920k
-Xmx80m
As a general rule, you
should set the minimum heap size (
-Xms
) equal to the maximum heap size (
-Xmx
) to minimize garbage collections.
Typically, SAS sets
both
-Xms
and
-Xmx
to be about 1/4 of the total available
memory or a maximum of 128M. However, you can set a more aggressive
maximum memory (heap) size, but it should never be more than 1/2 of
physical memory.
You should be aware
of the maximum amount of physical memory your computer has available.
Let us assume that doubling the Java memory allocation is feasible.
So when you start SAS from a system prompt, you can add the following
option:
-jreoptions (-Xmx256m -Xms256m)
Alternatively, you might
need to specify the setting in quotation marks:
-jreoptions '(-Xmx256m -Xms256m)'
The exact syntax varies
for specifying Java options, depending on your operating system, and
the amount of memory that you can allocate varies from system to system.
The set of JRE options must be enclosed in parentheses. If you specify
multiple JREOPTIONS system options, SAS appends JRE options to JRE
options that are currently defined. Incorrect JRE options are ignored.
If you choose to create
a custom configuration file, you would simply replace the existing
-Xms
and
-Xmx
suboption values in the JREOPTIONS=(all Java options) portion of
the configuration file.
For more information,
see the SAS Companion for your operating system.