“Ocorreu um erro durante a boot da VM; Não foi possível reservar espaço suficiente para heap de object ”usando -Xmx3G

Primeiro de tudo, eu tenho uma checkbox com 8GB de memory RAM, então eu duvido que a memory total é o problema. Esta aplicação está funcionando bem em máquinas com 6GB ou menos.

Eu estou tentando reservar 3 GB de espaço usando -Xmx3G em “VM Arguments” em Run Configurations in Eclipse.

Toda vez que tento reservar mais de 1500mb, recebo este erro: “Ocorreu um erro durante a boot da VM; Não foi possível reservar espaço suficiente para heap de object ”usando -Xmx3G

O que está acontecendo aqui?

Será que você está usando um jvm de 32 bits nessa máquina?

Aqui está como corrigi-lo: Vá em Start->Control Panel->System->Advanced(tab)->Environment Variables->System

 Variables->New: Variable name: _JAVA_OPTIONS Variable value: -Xmx512M Variable name: Path Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin; 

Mude isto para o seu caminho apropriado .

Na verdade, isso não é um problema específico do Eclipse; é um problema geral do Java-on-Windows. É por causa de como a JVM aloca memory no Windows; ele insiste em alocar um pedaço contíguo de memory, que muitas vezes o Windows não pode fornecer, mesmo se houver blocos separados suficientes para satisfazer o pedido de alocação. Existem utilitários que tentarão ajudar o Windows a “desfragmentar” sua memory, o que, teoricamente, ajudaria nessa situação; mas eu realmente não tentei de verdade, então não posso falar sobre sua eficácia. Uma coisa que eu ouvi algumas vezes que pode ajudar é reiniciar o Windows e, antes de iniciar qualquer outro aplicativo, iniciar o aplicativo Java que precisa do grande pedaço de memory. Se você tiver sorte, o Windows ainda não terá fragmentado seu espaço de memory e Java receberá o bloco contíguo solicitado.

Em algum lugar nas interwebs existem explicações e análises mais técnicas sobre esse assunto, mas não tenho nenhuma referência à mão.

Eu encontrei isso, porém, o que parece útil: https://stackoverflow.com/a/497757/639520

Primeiro o JRE de 32bits não pode usar mais ~ 1.5Gb de ram. Então, se você quiser mais, use um JRE de 64bits.

Segundo, quando uma nova JVM for iniciada, isso sum a propriedade -Xmx da JVM toda em execução e verifica se há memory suficiente no sistema para ser executada em seu próprio -Xmx, se não for suficiente, o erro ocorrerá.

Eu estava usando o Liferay com o servidor Tomcat do eclipse IDE. Eu estava preso com esse mesmo erro ao clicar na boot do servidor. Dê um duplo clique no servidor do eclipse. abra a página Visão geral do servidor. Argumentos de memory atualizados de -Xmx1024m -XX: MaxPermSize = 256m para -Xmx512m -XX: MaxPermSize = 256m. Então estava funcionando para mim.

Certifique-se de que o Eclipse esteja realmente executando a mesma JVM que você acha que está executando. Se você usa o java em seu navegador da web, provavelmente tem uma versão de 32 bits flutuando também que pode estar tomando precedência se instalada ou atualizada ultimamente.

Para ter certeza, recomendo adicionar essas duas linhas ao seu arquivo eclipse.ini no topo:

 -vm C:/Java/jdk1.6.0_27/bin 

… onde na minha máquina C:/Java/jdk1.6.0_27/bin onde a JVM que eu sei é 64 bits está localizada. Certifique-se de ter a pasta bin lá.

(Como um bônus, no Windows 7, isso também permite que você realmente “fixe a guia” e é por isso que eu tive que fazer isso para meu próprio uso)

Esta é a questão do tamanho da pilha. Edite seu .bat (arquivo em lote). Ele pode estar mostrando o tamanho de heap 1024. Altere-o para 512 Então, ele deve funcionar.

Eu também tive o mesmo problema ao usar o Eclipse que era de 32 bits e a JVM usada por ele era de 64 bits. Quando eu roteei o Eclipse para 32 bits JVM, então funcionou

Provavelmente você está tentando opções erradas de qualquer maneira. Eu recebi um erro semelhante com suporte ao log de erros:

 Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0 Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0 

No meu caso, o software não suportava o java 8 ainda (o script estava usando argumentos antigos da JVM), mas eu tinha o java 8 por padrão.

Uma das razões para este problema é que não há memory disponível para o Tomcat iniciar. Tente excluir o software de execução indesejado do Windows e reinicie o eclipse e o tomcat.