Am I almost out of memory on Java because "JVM Free Memory" on the System Info is almost zero?
“JVM Free Memory” doesn’t work how you might expect. Notice that there are three memory values showing on that screen. We’ll describe them in reverse order because that is easiest.
“JVM Max Memory” shows the most memory the Java VM is ever allowed to consume on your server. It is a setting that our installer defines.
“JVM Total Memory” shows the total amount of memory the Java VM actually has allocated right now. In order to be nicer to other application on the system, Java only grows to “JVM Max Memory” when it actually has to.
“JVM Free Memory” shows how much memory is completely free and ready for immediate use. Keep in mind that Java uses garbage collection. If you do something that returns a group of documents from the database, the metadata (doc number, title, etc) for those documents will temporarily be in memory. When we get done with your request, the document metadata is released but Java does not count that as a part of “JVM Free Memory” until after the garbage collector has scanned the heap, sees the released document metadata and then actually frees that block of memory.
So basically for Java at any moment in time, the “real” amount of what you probably think of as free memory is:
(“JVM Max Memory” - “JVM Total Memory”) + “JVM Free Memory” + whatever is waiting to be garbage collected