![Ubuntu 14 JVM - Não foi possível reservar espaço suficiente para a matriz de marcação de cartão](https://rvso.com/image/1083717/Ubuntu%2014%20JVM%20-%20N%C3%A3o%20foi%20poss%C3%ADvel%20reservar%20espa%C3%A7o%20suficiente%20para%20a%20matriz%20de%20marca%C3%A7%C3%A3o%20de%20cart%C3%A3o.png)
Após a atualização para o Ubuntu 14, tenho problemas com todas as JVMs travando.
Eu reinstalo o Java (versões Oracle e OpenJDK). Passei algum tempo ajustando os parâmetros de heap da JVM e agora, finalmente, posso executar aplicativos Java.
Agora, o problema é que toda vez que inicio o SQLDeveloper, minha JVM Eclipse me dá: "Não foi possível reservar espaço suficiente para a matriz de marcação de cartão".
Se bem entendi, tem algo a ver com a alocação de pedaços de memória da JVM.
Existe uma regra que devo seguir para evitar que isso aconteça?
Informações da máquina:
Ubuntu 14.04 LTS; 64 bits; Processador Intel Core2 Duo; Memória de 8 GB
Eclipse: java-7-oracle; -d64; -XX:MaxPermSize=256M; -Xms512m -Xmx512m;
Execução/depuração do Eclipse: java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; -XX:+UsarSerialGC;
SQLDeveloper: java-7-oracle; -XX:MaxPermSize=256M;
Responder1
A JVM está tentando alocar um bloco contíguo de memória. Como tenho memória suficiente no sistema, ela deve estar fragmentada.
Para resolver o problema, defini o tamanho de heap inicial muito baixo (o padrão 128 não funcionou) e permiti que a JVM lidasse com isso.
Alterei os parâmetros de execução da JVM de:
java-6-openjdk-amd64; -Xms1024m; -Xmx1024m;
Para:
java-6-openjdk-amd64; -Xms64m; -Xmx1024m;
Atualizar:
Também reduzi o overcommit_ratio de 100 (padrão) para 50.
$ cat /proc/sys/vm/overcommit_ratio
Eu sei que é recomendado mantê-lo 100, mas desde que fiz a alteração, não recebo erros de jvm quando executo o Chromium/Eclipse/SQLDeveloper em paralelo.