When launched as an Application, Jalview will automatically configure the amount of memory allocated to the program to be 90% of physical memory, or 32GB - which ever is smaller.
This behaviour might not be ideal if you are working on a machine that runs other memory intensive processes, and (since Jalview 2.11.2) can be changed via the Startup Preferences panel.
Signs that Jalview is Running out of Memory
If
Jalview has not explicitly told you that it has run out of memory,
then a common sign is that a function that normally works seems to
have no effect when working with a larger set of sequences (this
might include open dialog boxes for saving PNG files, or when
interpreting the result of a web service calculation).
Jalview Memory Usage Monitor: If you are concerned about memory, or think that things might be behaving strangely because of a shortage of memory, then you can check this by enabling the memory usage monitor. This is done by selecting the Tools→Show Memory Usage option. Once enabled, the memory usage monitor displays the currently available memory, the total memory, and the percentage free at the bottom left hand side of the Jalview Desktop window's background.
Increasing the memory available to Jalview
The
amount of memory allocated is defined wheb Jalview is launched
because of the way that Java runs on a computer - what is actually
run is a program called a Java virtual machine (a JVM) which
executes the java program instructions. The JVM has limits on the
memory that can be allocated to the java program - and it is often
necessary to adjust them if you are working with particularly large
datasets, or need to make room for other processes on the machine.
Jalview 2.11 includes a launcher that automatically
configures the proportion of memory allocated to Jalview's JVM. By default it requests up to 90% of available memory whilst ensuring that at least 0.5G is available to the operating system and at least 0.5G is available to the Java runtime platform, or a specified 'maximum memory limit' - which ever is smaller. The amount of memory requested can be altered in a number of different ways:
jalview.jvmmempc=50In Windows and in macOS you can then launch Jalview by double clicking on this file, and your memory setting will be used instead of the default value.
/PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvlIf you want to use a memory setting like this and open a file you can use both the jvl and alignment files as command line arguments, but you must put the jvl file first, e.g.
/PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl /path/to/alignments/myalignment.faAlternatively, you can use the standard Jalview command line arguments with or without the jvl file (first), e.g.
/PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl -open https://www.jalview.org/examples/jpred_msa.fasta -annotations https://www.jalview.org/examples/jpred_msa.seq.concise -colour ClustalYou can use command line arguments to control memory settings in Windows and macOS too:
\PATH_TO_JALVIEW\Jalview.exe %HOMEPATH%\mymemorysetting.jvl -open %HOMEPATH%\myalignment.faIn macOS you can use the macOS open command like this:
open /Applications/Jalview.app --args ~/mymemorysetting.jvl -open ~/myalignment.fa(put all the Jalview arguments after the --args parameter)
jalview.jvmmemmax = 32GAdjusting this default (via a JVL file, above) will allow larger amounts (or can limit the amount) of memory to be allocated to Jalview in conjunction with the jalview.jvmmempc setting.
java -jar jalview-all-2.11.1.0-j1.8.jar -jvmmempc=50 -jvmmemmax=20g(this example will launch Jalview with a maximum heap size of the smaller of 20GB or 50% of physical memory detected).
-Xmx8gJalview binaries for Windows and macOS are distributed with their own JVM which you will find in
\PATH_TO_JALVIEW\release
/Applications/Jalview.app/Contents/Resources/app/releaseand on linux or unix
/PATH_TO_JALVIEW/release
java -Xmx1500m -cp "/PATH_TO_RELEASE_DIR/*" jalview.bin.JalviewOr on Windows
java.exe -Xmx1500m -cp "\PATH_TO_RELEASE_DIR\*" jalview.bin.JalviewNote: for this to work the classpath argument wildcard must be simply a '*' and not '*.jar'.