Respostas:
usar os argumentos -Xms<memory>
-Xmx<memory>
. Use M
ou G
após os números para indicar Megs e Gigs de bytes, respectivamente. -Xms
indica o mínimo e -Xmx
o máximo.
-Xmx524M
e o processo ocupa 1,2 GB de RAM. (?)
Você não precisa se preocupar com o vazamento de memória da pilha (é altamente incomum). O único momento em que você pode deixar a pilha fora de controle é com recursão infinita (ou realmente profunda).
Esta é apenas a pilha. Desculpe, não li sua pergunta completamente no começo.
Você precisa executar a JVM com o seguinte argumento da linha de comandos.
-Xmx<ammount of memory>
Exemplo:
-Xmx1024m
Isso permitirá um máximo de 1 GB de memória para a JVM.
-XX:MaxDirectMemorySize
. Não que eu tenha perfilado fortemente para ter certeza, mas ainda;)
MaxDirectMemorySize
único afeta os buffers NIO. Todos os tipos de outras memórias nativas são usadas pela JVM.
Se você deseja limitar a memória para jvm (não o tamanho do heap) ulimit -v
Para ter uma idéia da diferença entre jvm e memória heap, dê uma olhada neste excelente artigo http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- java-process.html
ulimit
um comando do Linux? Fiz uma pesquisa rápida no Google e não vi nenhuma relação entre ulimit
e a JVM. Y
A resposta acima é do tipo correta, você não pode controlar normalmente quanta memória nativa um processo java aloca. Depende do que seu aplicativo está fazendo.
Dito isto, dependendo da plataforma, você poderá usar algum mecanismo, por exemplo, ulimit, para limitar o tamanho de um java ou qualquer outro processo.
Só não espere que falhe normalmente se atingir esse limite. As falhas de alocação de memória nativa são muito mais difíceis de tratar do que as falhas de alocação no heap java. Há uma chance razoavelmente boa de o aplicativo travar, mas dependendo de quão crítico é para o sistema manter o tamanho do processo baixo, o que pode ser útil para você.
O NativeHeap pode ser aumentado por -XX: MaxDirectMemorySize = 256M (o padrão é 128)
Eu nunca usei isso. Talvez você ache útil.