I am running with Java's -Xincgc option which enables incremental garbage collection. It is my understanding that incremental GC sacrifices efficiency in order to gain consistency. In other words, there is more work to do but since it is being done frequently, there should not be large elapsed times imposed by having to do a very large GC operation. Since my application has time to spare (at least when I use tightvnc), this is my preference.
Since discovering this problem, I have increased the memory of the server from 1.5 GB to 2 GB and I have increased the memory allowance for the Java applications but the problem persists. I may report back on performance on a 4 GB server next week.