Java.lang.OutOfMemoryError: Java heap space

7 respostas
R
Prezados, tenho um problema com uma aplicação que usa socket e recebe um array. O problema é que se o array for grande (100000) ocorre o erro:

Exception in thread “AWT-EventQueue-0” java.lang.OutOfMemoryError: Java heap space.
Já tentei quebrar o array em outros arrays para o envio/recebimento mas o mesmo ocorre. Usei o utilitário profiler que mostrou que durante o recebimento a grande utilização de memória até que dá erro. Ai tem o trecho de código da aplicação onde ocorre o erro.

File [] meuArray=null;
        InputStream in = socket.getInputStream();
    ObjectInputStream receive= new ObjectInputStream(in);   
    meuArray=(File [])receive.readObject();                         //OCORRE ERRO!

Só ocorre erro durante o recebimento do objeto. Alguém tem idéia de como resolver isso.

7 Respostas

fabim

Altere os argumentos -Xmx e -Xms

ViniGodoy

Se possível, altere o seu algoritmo para ler pequenas porções do array, processa-las e já enviar o resultado para o disco.

Claudio_Nazzari

Altere o espaco alocado de memoria para a JVM com os argumentos -Xms(minimo) e -Xmx(maximo)…
Da uma olhada: http://www.guj.com.br/posts/list/43775.java

:wink:

T

Amigo, eu sempre digo: se você quer perder seu emprego, use ObjectInput/OutputStream com sockets.
Uma hora vão aparecer problemas que não serão possíveis de resolver sem rearquitetar sua solução.

ViniGodoy

Claudio Nazzari:
Altere o espaco alocado de memoria para a JVM com os argumentos -Xms(minimo) e -Xmx(maximo)…
Da uma olhada: http://www.guj.com.br/posts/list/43775.java

:wink:

Eu realmente acho isso uma solução paleativa. Uma boa arquitetura não deveria consumir toda memória da máquina para uma transmissão socket.

brunohenrique

Vini minha opinião soma-se a sua.
Acredito que um programa bem estruturado não deveria render este consumo de memória,

e eu estou com este problema:
BD 130.000 registro.
preciso atualizar 1 a 1 destes registros em apenas um campo.

Preciso realmente trazer todos estes registros no meu ResultSet? ou posso quebrar em várias consultas sem perder o registro setado?

valeu pela força

ViniGodoy

Pq vc não usa simplesmente uma consulta de update?

Criado 9 de outubro de 2007
Ultima resposta 8 de nov. de 2007
Respostas 7
Participantes 6