Aumentar o tamanho do heap em Java

276

Estou trabalhando em um servidor Windows 2003 (64 bits) com 8 GB de RAM. Como posso aumentar a memória heap no máximo? Estou usando o -Xmx1500msinalizador para aumentar o tamanho do heap para 1500 Mb. Posso aumentar a memória heap para 75% da memória física (heap de 6 GB)?

Sunil
fonte
2
Você já tentou -Xmx6g? Isso não funcionou? O que você observou?
Oxbow_lakes 14/10/2009
2
Presumo que você tentou aumentar a pilha, mas falhou? Você está usando uma JVM de 64 bits?
22410 Bart Kiers
Obrigado por comentar, mas isso não está funcionando
Sunil
Bem - como você sabe que não está funcionando? A JVM não inicia?
Oxbow_lakes 15/10/09

Respostas:

327

Você pode aumentar para 4 GB em um sistema de 32 bits. Se você estiver em um sistema de 64 bits, poderá subir mais. Não precisa se preocupar se você escolheu incorretamente, se você pedir 5g em um sistema de 32 bits, o java irá reclamar de um valor inválido e sair.

Como outras pessoas postaram, use os sinalizadores de linha cmd - por exemplo

java -Xmx6g myprogram

Você pode obter uma lista completa (ou uma lista quase completa, de qualquer maneira) digitando java -X.

Steve B.
fonte
16
Foi minha experiência que o tamanho real do heap que Java aceitará usando uma VM 32b (em um sistema 32b ou 64b - a VM é a parte importante, aqui), gira em torno de 2G. Além disso, consulente surpreendeu não primeiro procurar e encontrar: stackoverflow.com/questions/1596009/... e: stackoverflow.com/questions/37335/...
wsorenson
2
ah, você está certo, é claro - em um sistema de 32 bits, você pode endereçar apenas 2 Gb de memória.
21412 Steve Steve
É necessário que o tamanho máximo e mínimo da pilha sejam iguais?
user1747935
1
Não. Mas as pessoas geralmente fazem isso porque a JVM nunca pode perder tempo redimensionando. Duvido que isso importe muito, TBH.
Steve B.
1
@ PhillipRego, você o define como quiser, até os limites que a JVM pode abordar. -Xmx2G define sua memória para 2G (veja também -Xms). Isso não diz nada sobre quanta memória você precisará.
Steve B.
155

É possível aumentar o tamanho do heap alocado pela JVM usando as opções de linha de comando Aqui temos 3 opções

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

Na linha acima, podemos definir o heap mínimo para 16mb e o heap máximo de 64mb

Karthik Reddy
fonte
28

Em uma JVM de 32 bits, o maior tamanho de heap que você pode definir teoricamente é de 4 GB. Para usar um tamanho de heap maior, você precisa usar uma JVM de 64 bits. Tente o seguinte:

java -Xmx6144M -d64

O sinalizador -d64 é importante, pois indica à JVM para executar no modo de 64 bits.

Kevin
fonte
Obrigado chefe, mas ele não está funcionando no meu sistema existe alguma outra coisa que estou em falta
Sunil
4
Defina "não está funcionando". Ele não inicia e gera um erro? Ele inicia, mas usa um tamanho de pilha diferente?
Kevin
11

É possível aumentar o tamanho de heap alocado pela JVM no eclipse diretamente No eclipse IDE, vá para

Executar ----> Configurações de Execução ----> Argumentos

Digite -Xmx1g (é usado para definir o tamanho máximo como Xmx256m ou Xmx1g ...... m -> mb g ---> gb)

Karthik Reddy
fonte
3
Só para adicionar isso, deve haver um argumento de VM (eclipse oferece duas opções).
Matt Boyle
11

java -d64 -Xms512m -Xmx4g HelloWorld

em que, -d64: habilitará a JVM de 64 bits -Xms512m: definirá o tamanho inicial do heap como 512 MB -Xmx4g: definirá o tamanho máximo do heap como 4 GB (aqui o nome do arquivo java é: HelloWorld.java)

Sumit Deshinge
fonte
9

Você pode aumentar o tamanho do heap passando os parâmetros -Xms e -Xmx da JVM, como abaixo:

Para arquivos jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Para arquivos Java:

 java -Xms4096M -Xmx6144M ClassName

Os parâmetros acima aumentam o InitialHeapSize (-Xms) para 4 GB (4096 MB) e o MaxHeapSize (-Xmx) para 6 GB (6144 MB).

Porém, o tamanho de heap da geração nova permanecerá o mesmo e o HeapSize adicional será adicionado ao tamanho de heap da geração antiga . Para igualar o tamanho dos Young Gen Heap e Old Gen Heap , use -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy parâmetros.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Tamanho da pilha de geração antiga: Jovem geração HeapSize (você pode jogar com essa proporção para obter a proporção desejada).

Sahil Chhabra
fonte
7

Posso aumentar a memória heap para 75% da memória física (heap de 6 GB).

Sim você pode. De fato, você pode aumentar para mais do que a quantidade de memória física, se desejar.

Se é uma boa idéia fazer isso depende de quanto mais está sendo executado no seu sistema. Em particular, se o "conjunto de trabalho" dos aplicativos e serviços atualmente em execução exceder significativamente a memória física disponível, seu sistema poderá "thrash", gastando muito tempo movendo as páginas de memória virtual para e do disco. O efeito líquido é que o sistema fica terrivelmente lento.

Stephen C
fonte
Obrigado pelo seu comentário Mas como posso aumentar.Plz você pode dar o comando.
Sunil
Tente -Xmx6000m. Deverá funcionar se você estiver usando uma versão de 64 bits do Java.
Stephen C
3
Tem certeza de que está executando uma versão de 64 bits do Java? Em um sistema operacional de 64 bits?
21715 Stephen C #
4

Use o comando abaixo para alterar o tamanho da pilha para 6 GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
Baum mit Augen
fonte
Se eu tenho memória 8G no meu sistema e posso ver no gerenciador de tarefas que sempre 70% está em uso; é possível alocar memória 6G para o tamanho da pilha do java?
precisa saber é o seguinte
1
@Reihan_amn Sim e não, se você exceder a memória, ela irá para a paginação, que está no disco e é incrivelmente lenta. Se você exceder os arquivos de paginação, estará em um mau momento.
CodeMonkey
2

Várias pessoas apontaram as respostas específicas para o tamanho da pilha com as opções jvm de -Xmse -Xms. Quero ressaltar que esse não é o único tipo de opções de memória para a jvm. Especificamente, se você obtiver fluxos de pilha em excesso, convém aumentar o tamanho da pilha adicionando uma opção adicional como -Xss8m.

Para esse problema, as opções jvm de algo como -Xms2g -Xmx6g -Xss8mseriam uma solução.

Estou compartilhando essas informações, pois minhas pesquisas no google sobre como aumentar a memória jvm me levaram a esta solução, e as soluções não funcionaram com grandes quantidades de alocação de memória. Depois que eu descobri quais eram as configurações específicas, consegui pesquisar no Google como aumentar o tamanho da pilha e encontrei o parâmetro ausente. :) Espero que isso economize tempo para os outros, como pouparia uma tonelada de tempo. :)

James Oravec
fonte
2

Isso funciona apenas com a versão de 64 bits do Java. Vá ao Painel de Controle e clique no ícone Java. Na pequena janela do Java Control Panel, clique na barra de menus Java e, em seguida, clique no viewbotão

Se você tiver duas plataformas Java, desative a versão anterior do Java, clique no campo de texto Parâmetros de Tempo de Execução e grave -Xmx1024mou menor que o tamanho da RAM. Não aumente o tamanho da pilha igual à RAM, caso contrário, seu sistema falhará.

madhu
fonte
Se você tornar o tamanho da pilha igual à RAM, o sistema não falhará. Em vez disso, o sistema começará a paginar e ficará agradável e lento.
DaveTheMinion 19/09/19
0

Sim. Você pode.

Você pode aumentar sua memória heap para 75% da memória física (heap de 6 GB) ou superior.

Como você está usando 64 bits, você pode aumentar o tamanho do heap para a quantidade desejada. Caso você esteja usando 32 bits, é limitado a 4 GB.

$ java -Xms512m -Xmx6144m JavaApplication

Define você com o tamanho inicial do heap para 512mb e o tamanho máximo do heaps para 6GB.

Espero que ajude.. :)

Sarat Chandra
fonte
Isso parece muito semelhante às duas respostas mais votadas postadas alguns anos antes.
Bernhard Barker
0

Estou com problemas ao executar os arquivos py no meu código java usando eclipse / STS, obtendo o PyException devido à memória heap da jvm insuficiente. Fiz as alterações conforme mencionado abaixo e consigo resolver esse problema. Abaixo está a minha configuração do sistema.

insira a descrição da imagem aqui

E essas são as alterações que fiz no meu espaço de trabalho e, agora, ele está perfeito.

insira a descrição da imagem aqui insira a descrição da imagem aqui

homem
fonte