java.lang.OutOfMemoryError: Java heap space

SKIPTpaWa

Membro
Bom dia pessoal, mais 1 dia, mais 1 duvida estúpida (se calhar) XD

é o seguinte:

Aqui no meio das minhas programações e tal em java, Estou a criar 1 programa que cria gráficos de gantt a partir de 1 tabela de encomendas e, quando são "milhoes" de linhas de gráfico de resultado, quando ta a criar o grafico, volta e meia, da o peido e aparece no systemOut:

java.lang.OutOfMemoryError: Java heap space

1º e unico ponto :P Dá para meter 1 try catch no "main" para este caso!? ou quando sao cenas de memoria nao ha hipotese para try catch?!



(O que gera o grafico corre numa tread à parte para libertar os objectos swing)



***** bejinhos e respondam rapido :P []




PS: Sei que dá para aumentar a memoria com o -Xmx , mas nao o queria fazer pois daqui a milhoes de anos vai haver milhoes de encomendas e puf na mesma.
 
Não dá para optimizar, porque quem cria as "linhas" do grafico é 1 api que estou a usar, ela sozinha faz isso.

e tipo se forem umas 27mil e tal linhas como o caso, dà o "PUF!"

mas se desse para fazer 1 cena ***** tipo um catch da " falta da memoria " ja alertava ***** coisa.

porque o objectivo do programa é ter 1 filtro para seleccionar encomendas segundo certas caracteristicas.

e se nao meter filtro nenhum aparecem todas....


mas aparecerem todas... dá esse puf...

ou se fizer 1 filtro que aparecao milhoes delas...

da o PUF!


se desse para fazer "catch" disso era milhoes de fixe, mandava para o ecra a dizer "filtre melhor" ou assim 1 cena.

obrigado! :)
 
>>> 1º e unico ponto Dá para meter 1 try catch no "main" para este caso!? ou quando sao cenas de memoria nao ha hipotese para try catch?!

Podes fazer (compila), mas não vai funcionar.
Porque, se dá este erro, então é porque o garbage collector já não pode libertar mais nenhuma memória.
Isso significa que, na próxima alocação de objecto, vais voltar a ter o mesmo erro.
 
liberta recursos de memoria que não estejam em uso e não esperes que o GC faça isso.

O GC faz isso. Este erro apenas é lançado quando o GC já não consegue reclamar mais recursos (depois de ser forçado a actuar), e quando a JVM não consegue obter mais memória devido a, por exemplo, ter atingido o limite que pode ser parametrizado com a flag Xmx.

1º e unico ponto :P Dá para meter 1 try catch no "main" para este caso!? ou quando sao cenas de memoria nao ha hipotese para try catch?!

Sim, dá. Apesar de não ser uma excepção, estende a classe Throwable, logo é catchable. No entanto, não é aconselhável pelas razões que já foram indicadas.


PS: Sei que dá para aumentar a memoria com o -Xmx , mas nao o queria fazer pois daqui a milhoes de anos vai haver milhoes de encomendas e puf na mesma.

Podes sempre experimentar outra biblioteca para a criação dos gráficos, uma vez que o número de registos que mencionaste não é assim tão extraordinário como isso, o que pode indicar que algo não está a ser bem feito na geração dos gráficos.

Também não creio que seja do interesse de alguém visualizar relatórios de encomendas com time spans de vários anos, logo, o que poderias fazer era colocar um filtro na aplicação que por omissão apenas utiliza as encomendas do presente mês ou outro critério que seja mais útil para o cliente ao qual se destina a aplicação.
 
:)

Obrigado a todos, como disse o AliFromCairo vou impor que o programa so mostre um certo limite de linhas. Porque apartir de um certo numero o que é vizualizado deixa de ser perceptivel. E, se limitar o numero, resolve-se o problema.



Obrigado a todos! []


______________________________
<-- My system spec's Rulz
 
Aumenta tambem a memoria que o programa usa.

Por omissao o valor é muito baixo.
512Mb é um valor aceitavel e deve dar para muitos milhares de linhas
 
Back
Topo