Às vezes, esse erro indica que a memória física e a troca no servidor são realmente utilizadas!
Eu estava vendo esse problema recentemente em um servidor executando o RedHat Enterprise Linux 5.7 com 48 GB de RAM. Eu descobri que mesmo correndo
java -version
causou o mesmo erro, que estabeleceu que o problema não era específico do meu aplicativo.
Corrida
cat /proc/meminfo
relataram que MemFree e SwapFree estavam bem abaixo de 1% dos valores MemTotal e SwapTotal, respectivamente:
MemTotal: 49300620 kB
MemFree: 146376 kB
...
SwapTotal: 4192956 kB
SwapFree: 1364 kB
A interrupção de alguns outros aplicativos em execução na máquina trouxe um pouco à memória livre:
MemTotal: 49300620 kB
MemFree: 2908664 kB
...
SwapTotal: 4192956 kB
SwapFree: 1016052 kB
Nesse ponto, uma nova instância do Java seria iniciada corretamente e eu era capaz de executar meu aplicativo.
(Obviamente, para mim, essa foi apenas uma solução temporária; ainda tenho uma tarefa extraordinária de fazer um exame mais minucioso dos processos em execução nessa máquina para ver se há algo que pode ser feito para reduzir os níveis de utilização de memória nominal, sem ter que recorrer à interrupção dos aplicativos.)