Exception in thread "main" java.lang.OutOfMemoryEr

9 respostas
Leonardo

pessoal, alguém sabe como posso zerar a Garbage Collector ? melhor ainda alguém sabe dizer porque ocorre a exception Exception in thread “main” java.lang.OutOfMemoryError: out of memory ??

:?

Valeu !

9 Respostas

Paulo_Silveira

Heheheh
voce estourou a memoria que a sua virtual machine tinha disponivel

Ou voce estar alocando memoria em um loop infinito, ou tem algo de mais errado ainda!

Pra aumentar a memoria que a sua virtual machine tem disponivel, use:

java -mx32m

Você pode trocar o 32 para o numero de megas que voce deseja utilizar. Sugiro 64, no mínimo.

Leonardo

qual é o valor default ?

Gilmar_Rodrigues

Se não me engano são 8Mb.

[]'s

Rafael_Steil

hm… mas isso significa que a jvm tem disponivel para o heap 8MB soh? ( no caso desse ser o valor default… mas a pergunta vale independente do numero de megas… ).

ta… nao sei se eh “disponivel para o heap”, mas queria enfeitar a frase :mrgreen:

urubatan

Seguinte:
é impossivel você forçar o garbage collector a “limpar a memoria”, mas você pode aumentar a prioridade do thread dele. :twisted:

mas olha só: se esta dando estouro de memoria, alguma coisa de muito errado você esta fazendo, se fosse você iria dar uma olhada no codigo do programa antes de pensar em mexer com o Garbage Collector :lol:

E

Para forçar o Garbage Collector não é preciso apenas chamar

System.gc()

Rafael_Steil

“EddiE”:
Para forçar o Garbage Collector não é preciso apenas chamar
System.gc()

vc nao “forca” o garbage collector, mas sim apenas diz “olha, eu gostaria que voce rodasse agora, se tiver um tempinho”… mas o gc nao eh obrigado a aceitar prontamente… se aceitar… :slight_smile:

Rafael

Paulo_Silveira

eh bem simples

o garbage collector eh uma thread, e o que ele faz (versao pseudopseudo)

if (precisoLiberarMemoria()) {
  liberaMemoria();
}

o segredo eh esse metodo precisoLiberarMemoria. Normalmente eh um if q diz se a memoria esta em niveis criticos, ou se ja faz mto tempo q ele rodou pela ultima vez. Quando voce da Syste,.gc(), os GC PODE ou NÂO guardar isso, e da proxima vez q rodar o “precisoLiberarMemoria()” ele devolve true, ja q vc pediu. Mas a especificao da JVM nao garante nada, ele pode simplesmente ignorar o seu pedido!

Guilherme_Silveira
  1. o numero de threads famintas rodando tambem vai diminuir a eficacia do garbage collector, claro
  2. voce pode aumentar tambem a memoria inicial para um programa java, em aplicacoes que chegam a precisar de um maximo de 512 logo no start, se voce seta isso pra 512 e maximo 1024, eh sem nocao o boost de velocidade que da…
  3. eu creio que as propriedades de inicial e maximo de memoria ram sao para os objetos da jvm e nao para o programa e tal, o q deve significar memoria da sua aplicacao e nao do java.exe (ou do genero) e suas necessidades

gui

Criado 23 de setembro de 2002
Ultima resposta 24 de set. de 2002
Respostas 9
Participantes 7