OutOfMemoryError

4 respostas
mateus.cordeiro

Bom dia

Estou com problema em uma aplicação dando o seguinte erro de OutOfMemory:

Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space at java.io.ObjectOutputStream$BlockDataOutputStream.<init><Unknown Source> at java.io.ObjectOutPutStream.<init><Unknown Source> at str2kserver.Porta1.abrirConexoes<Porta1.java:38> at str2kserver.Porta1.run<Porta1.java:16>

Será que tem algum modo de verificar quais os objetos estão ocupando memoria?
Já aumentei a quantidade de memoria, porem continua dando problema!

Alguma sugestão? o que pode ser ou o que estudar para resolver?

4 Respostas

F

Mateus,

Esse tipo de erro pode ocorrer quando, por exemplo, populamos um lista com um número muito alto de objetos e em seguida percorremos essa lista para fazer alguma operação.

Esse é um dos possíveis motivos.

Se você puder, posta o trecho código onde o problema está ocorrendo. Assim talvez possamos ajudar com mais precisão.

Abraço.

FernandoFranzini

Aplicação java esta precisando gastar mais memoria do que a alocada para JVM. Por isso acontece o erro de falta de memoria!

Trabalhar com memoria no Java é como uma brincadeira de criança…

  • a memoria é copo com um tamanho determinado.
  • cada vez que é criado uma variavel ou objeto (new), seria como se colocasse um gotinha ou gota de água nesse copo.

Como funciona?

  • Quando vc inicia a aplicação, ja acontece um gasto com um pouco de água…tipo uns 20% do copo (pelos gastos do objetos iniciais)
  • Enquanto a aplicação ta rodando, vai criando e executando os objetos, ou seja, vai enchendo de água esse copo.
  • Quando a água começa ficar em media acima dos 70% do tamanho disponivel ocupado, o GC ja vai se mover tentando retirar/derramar essa agua do copo (retirar os objetos sem referencia)
  • Se o gc conseguir, ele vai esvaziar o possivel e assim tudo volta ao ciclo repetitivo de uso. Vai usando e gastando denovo.
  • Se o gc não conseguir, a agua cai do copo e acontece o java.lang.OutOfMemoryError kkkkk

Motivos de Falta de Memoria?

  1. A solução esta gastando memoria desenfreadamente. Como?
  • Falta de uma arquitetura correta padrão.
  • Desenvolver despreparado, implementando código que gaste sem o devido controle.
    Como corrigir?
  • Aprender praticas de otimização.
  • Entender o funcionamento da solução em questão.
  • Alterar o codigo da aplicação, aplicando as melhores praticas diante de cada situação.

2 A solução esta gastando memoria corretamente, mas ainda não é suficiente. O que fazer?:

  • Se a aplicação ja esta 100% otimizada, a única coisa que pode ser feito é aumentar a memoria! A solução precisa de mais memoria!!!
maior_abandonado

mateus.cordeiro:
Bom dia

Estou com problema em uma aplicação dando o seguinte erro de OutOfMemory:

Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space at java.io.ObjectOutputStream$BlockDataOutputStream.<init><Unknown Source> at java.io.ObjectOutPutStream.<init><Unknown Source> at str2kserver.Porta1.abrirConexoes<Porta1.java:38> at str2kserver.Porta1.run<Porta1.java:16>

Será que tem algum modo de verificar quais os objetos estão ocupando memoria?
Já aumentei a quantidade de memoria, porem continua dando problema!

Alguma sugestão? o que pode ser ou o que estudar para resolver?

para você ver esse tipo de informação você pode usar o visual vm por exemplo… mas normalmente você vai ver que o que terá que mudar é a lógica do seu software…

isso acontece por algum motivo que costuma ser um pouco especifico, por exemplo você está lendo dados de uma origem relativamente grande de dados e está mantendo em memória tudo ao mesmo tempo (um arquivo por exemplo, maior do que sua memoria disponibilizada a aplicação), sem liberar partes anteriores que ja leu, ou está concatenando strings em um loop por exemplo…

diga oq ue sua aplicação está fazendo na parte que da o estouro de memória, se possível poste o código, talvez possamos ajudar.

mateus.cordeiro

Boa galera!
Vou verificar esses pontos na aplicação!
Obrigado pelas dicas!

Assim que revisar o codigo irei postar!

Obrigado

Criado 29 de novembro de 2011
Ultima resposta 29 de nov. de 2011
Respostas 4
Participantes 4