“Ocorreu um erro durante a inicialização do VM; Não foi possível reservar espaço suficiente para o heap do objeto ”usando -Xmx3G

89

Em primeiro lugar, tenho uma caixa com 8 GB de RAM, então duvido que a memória total seja o problema. Este aplicativo está funcionando bem em máquinas com 6 GB ou menos.

Estou tentando reservar 3 GB de espaço usando -Xmx3G em "VM Arguments" em Run Configurations in Eclipse.

Cada vez que tento reservar mais de 1500 MB, recebo este erro: “Ocorreu um erro durante a inicialização do VM; Não foi possível reservar espaço suficiente para o heap do objeto ”usando -Xmx3G

O que está acontecendo aqui?

user1212731
fonte
2
Qual versão do java você tem? Em qual sistema operacional você está executando?
Adam Rofer
Este era o Win7, e eu tinha 3 versões diferentes do Java instaladas. Um deles era o JRE de 32 bits que o Eclipse estava usando.
user1212731
3
Não se esqueça de marcar uma resposta como correta.
xdhmoore
Basta alterar a configuração em gridle.property com seu espaço sutaible
Bhushan

Respostas:

64

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

Laurent
fonte
8
Desculpe pela pergunta estúpida, mas como eu verificaria isso? E como posso usar 64 bits?
user1212731
3
Na verdade, eu tentei apenas java -d64 -version na linha de comando e veio com uma VM de servidor de 64 bits.
user1212731
6
Aparentemente, o Eclipse estava usando a versão de 32 bits do JRE que eu tinha instalado anteriormente, embora a de 64 bits fosse a instalação mais recente. Alterei as configurações em Preferências -> JREs instalados para resolver esse problema. Muito obrigado pela sua resposta!
user1212731
3
em qualquer caso, 32 bits não deveriam ser suficientes para endereçar 4 GB?
Thomas
7
Deveria ser, mas isso resolve meu problema. Não houve voto positivo para esta resposta devido à falta de explicação. Este link explica como um jvm de 32 bits não pode ultrapassar o espaço de heap máximo de 1 GB
Steven
57

Veja como consertar: Vá para 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 para o caminho apropriado .

Mohamed Adel
fonte
4
Apenas uma nota para os outros. Você adiciona uma variável SYSTEM, não uma variável USER. Eu tive esse problema no Eclipse e não precisei reinicializar minha máquina depois de fazer as alterações acima ... Eu só tive que reiniciar o Eclipse. Obrigado!
captain_jim1
Para os curiosos, o sinalizador -Xmx em _JAVA_OPTIONS especifica o tamanho máximo de heap JVM permitido. Isso evita que a JVM solicite espaço irracional (especialmente não alocável de forma contígua para máquinas de 32 bits ...)
varun
40

Na verdade, esse não é um problema específico do Eclipse; é um problema geral do Java no Windows. É por causa de como a JVM aloca memória no Windows; ele insiste em alocar um bloco contíguo de memória, o que muitas vezes o Windows não pode fornecer, mesmo que haja blocos separados o suficiente para atender à solicitação de alocação. Existem utilitários que vão tentar ajudar o Windows a "desfragmentar" sua memória, o que, em tese, ajudaria nessa situação; mas eu realmente não os experimentei com seriedade, então não posso falar sobre sua eficácia. Uma coisa que às vezes ouvi que pode ajudar é reiniciar o Windows e, antes de iniciar qualquer outro aplicativo, iniciar o aplicativo Java que precisa de um grande pedaço de memória. Se você tiver sorte, o Windows ainda não terá fragmentado seu espaço de memória e o Java obterá o bloco contíguo que é solicitado.

Em algum lugar nas interwebs há mais explicações e análises técnicas sobre o assunto, mas não tenho nenhuma referência disponível.

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

E-Riz
fonte
2
No meu caso, sua resposta parece funcionar. Eu não reiniciei o Windows, mas tentei fechar outros aplicativos no meu Windows e, em seguida, executar o java e foi capaz de iniciar a VM.
sttaq
21

Primeiro, o JRE de 32 bits não pode usar mais ~ 1,5 Gb de RAM. Portanto, se você quiser mais, use um JRE de 64 bits.

Em segundo lugar, quando uma nova JVM é iniciada, isso soma a propriedade -Xmx de todas as JVM que estão em execução e verifica se há memória suficiente restante no sistema para executar em seu próprio -Xmx; se não for suficiente, ocorre o erro.

Daniel De León
fonte
15

Eu estava usando o Liferay com o servidor Tomcat do Eclipse IDE. Eu estava preso com este mesmo erro ao clicar na inicialização do servidor. Clique duas vezes no servidor do eclipse. ele abre a página Visão geral do servidor. Argumentos de memória atualizados de -Xmx1024m -XX: MaxPermSize = 256m para -Xmx512m -XX: MaxPermSize = 256m. Então estava funcionando para mim.

Prathap
fonte
9

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

Para ter certeza absoluta, recomendo adicionar estas duas linhas ao seu eclipse.iniarquivo na parte superior:

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

... onde na minha máquina está C:/Java/jdk1.6.0_27/binlocalizada a JVM que conheço de 64 bits. Certifique-se de ter a binpasta lá.

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

Adam Rofer
fonte
O argumento -vm deve apontar para o executável Java, não apenas para uma pasta. Consulte wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz
1
Errado. Veja este bug do Eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer
Esse era realmente o problema! O Eclipse estava usando a versão de 32 bits do JRE que instalei em algum momento. Muito obrigado pela resposta e me levando na direção certa! Eu agradeço muito.
user1212731
@AdamRofer, esse bug é interessante, mas especificamente sobre o Windows 7 e para contornar um problema de fixar o Eclipse na barra de tarefas. Em geral, eclipse.ini deve apontar para o executável java, embora o iniciador Equinox pareça ser inteligente, pois procurará um executável java se -vm apontar para uma pasta (no Windows, pelo menos).
E-Riz de
@ E-Riz "deveria" é muito restrito para o meu gosto :) Espero que resolvam o bug sem ter que mudar o argumento vm algum dia. Aqui estão mais informações que seriam boas para eles atualizarem em sua eclipse.inipágina: wiki.eclipse.org/…
Adam Rofer
5

Essa é a questão do tamanho do heap. Edite seu .bat(arquivo em lote). Pode ser que o tamanho do heap seja 1024. Altere para 512 Então ele deve funcionar.

user1740626
fonte
2

Eu também tive o mesmo problema ao usar o Eclipse que era de 32 bits e o JVM usado por ele era de 64 bits. Quando eu direcionei o Eclipse para JVM de 32 bits, ele funcionou

Ajit K'sagar
fonte
2

Basta colocar o #símbolo na frente de org.gradle.jvmargs=-Xmx1536mem gradle.properties

 # org.gradle.jvmargs=-Xmx1536m
Sra. Sonia
fonte
Não tenho certeza de como funcionou ao tentar Kotlin-multiplataforma no Mac OS! de qualquer forma, obrigado!
Chintan Soni
0

Provavelmente você está tentando opções erradas de qualquer maneira. Recebi um erro semelhante com o 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 ainda não suportava java 8 (o script estava usando argumentos JVM antigos), mas eu tinha o java 8 por padrão.

Mateva
fonte
0

Um dos motivos desse problema é a falta de memória disponível para o Tomcat iniciar. Tente excluir o software em execução indesejado do Windows e reinicie o eclipse e o tomcat.

Sooribabu
fonte
0

Eu sei que estou um pouco atrasado, mas aí vem minha resposta:

Acabei de instalar a versão online do Java da Oracle (não a versão offline de 64 bits).

Depois de adicionar a variável JAVA_HOME ENV, funcionou!

Espero poder ajudar :)

Lars vom Bruch
fonte