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?
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?
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!