|
|
Publicado em 14/08/2017 16:49:22
|
|
|
|

O erro ocorreu durante a inicialização da VM Não consegui reservar espaço suficiente para o heap de objetos de 3145728KB
Recentemente estou trabalhando em um programa para Java. Originalmente, sempre gostei do gerenciamento de memória do Java, não precisa se preocupar em alocar memória, é só alocar, o coletor de lixo recupera a memória para você. Agora o programa é desenvolvido com uma grande quantidade de dados e, para agilizar, vou carregar todas as informações na memória, o que garantirá uma resposta rápida. Ainda estou contando a memória repetidamente, pensando na minha própria quantidade de dados, que deve ser suficiente no começo (minha máquina tem memória 4G, embora o Windows reconheça 3,5G, mas deve estar tudo bem comparado ao volume de dados atual).
Inesperadamente, o programa do primeiro experimento durou algumas horas e encontrou uma Exceção de Falta de Memória. Olhando as configurações da minha própria VM, defini -Xms512M -Xmx1024M. Sem pensar, mudei diretamente para -Xms512M -Xmx2048M, e o resultado foi que não consegui reservar espaço suficiente para o object heap. O programa não consegue levantar. Só então percebi que ainda havia um limite para a memória máxima original. Pesquisei na internet e encontrei muitos artigos discutindo esse assunto. Finalmente, encontrei o artigo mais útil no fórum DEV2DEV da BEA
Aqui, o moderador YuLimin fez o teste e chegou à conclusão:
Versão da JVM da empresa Cliente de memória máxima (mega) Servidor de memória máxima (mega)
SOL 1.5.x 1492 1520
SUN 1.5.5 (Linux) 2634 2660
DOM 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Estou usando JDK1.6.0_05 agora, testei. O maior problema no estado do cliente é que meu JDK não reconhece o parâmetro -Server e não consegue testar o estado do servidor. As estimativas são mais ou menos as mesmas.
DOM 1.6.0 1442 N/d
Parece impossível usar grande memória em Java. E o ditado geral é que, se a memória for muito grande, o tempo de coleta de lixo será longo. Isso também é compreensível, geralmente coletado quando a memória não é suficiente, a varredura da memória 2G é, claro, muito mais lenta que 1G, e há mais objetos de memória, a relação estimada está aumentando exponencialmente.
Abaixo estão anexados os métodos de teste e registros de teste do YuLimin.
Método de Teste:Teste com o comando java -XmxXXXXM -version na linha de comando, e então aumentar gradualmente o valor de XXXX, se for executado normalmente, significa que o tamanho de memória especificado está disponível, caso contrário uma mensagem de erro será impressa.
Teste a memória máxima suportada da JVM e então defina as variáveis de ambiente no sistema
Nome da variável: _JAVA_OPTIONS Valor: - Xmx1G
|
Anterior:O plugin de tela cheia "jQuery Fullscreen Plugin" é usadoPróximo:A diferença entre certificados SSL, OV, DV e EV
|