Uso da memória em java...  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
henriquedamota
JavaChild
[Avatar]

Membro desde: 24/05/2007 01:19:12
Mensagens: 123
Offline

A ferramenta que estamos desenvolvendo propõe-se a converter os dados da pesquisa PNAD do IBGE,
de um formato proprietário utilizado pelo programa estatístico denominado SAS, para formatos mais acessíveis.
Dois desses formatos são .xls e .mdb (Excel e Access respectivamente).

Para realizar essa conversão estou utilizando duas APIs para Java que manipulam arquivos Excel e Access.
A API JXL para Excel e a JACKCESS para Access.

Pois bem, o que está acontecendo é que para conversões de grande porte, ou seja, quando o arquivo de dados de entrada possui muitas linhas (o maior possui mais de 400.000), a memória vai enchendo até que aconteça um estouro de memória ou o travamento do sistema operacional, por super utilização da memória disponível.

O problema é que nessas APIs, parece que os dados que estão sendo lidos, vão sendo armazenados na memória
da máquina virtual (VM) até que todo o arquivo com os dados de entrada tenha sido lido e, por isso,
acontece o estouro de memória.

Para a conversão para o formato CSV (separado por vírgulas), esse problema não acontece,
provavelmente por que ele grava uma linha e já elimina os dados da memória para ler a próxima linha.



Bom se alguem puder me dar uma luz agradeço!

Muito Obrigado galera ! absss !

Henrique da Mota Silveira
Análise e Desenvolvimento de Sistema - FT - UNICAMP 2008
[MSN]
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

então o único jeito é aumentar a memória do Java, com o:

java -Xmx1000m -jar xpto.jar

This message was edited 2 times. Last update was at 28/05/2008 07:44:05


http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
henriquedamota
JavaChild
[Avatar]

Membro desde: 24/05/2007 01:19:12
Mensagens: 123
Offline

Então cara... aumentei ate o limite por ai e num deu... travou o windows.


Cara num teria como eu fazer como eu fazer de um jeito q não fique enchendo a memória que nem o CSV ? Mesmo que demorasse um pouco mais para processar tudo, mas seria o ideial deixar o sistema com escalabilidade.


Abraços !

Henrique da Mota Silveira
Análise e Desenvolvimento de Sistema - FT - UNICAMP 2008
[MSN]
fviana
JavaChild
[Avatar]

Membro desde: 09/06/2005 09:19:51
Mensagens: 116
Offline

cara, vc já deu uma lida na doc. da api pra ver se há alguma configuração que faltou?
tente abrir ou baixar na net o codigo dessas api's, verifique se há prolemas no codigo e tente extender pra corrigir.
[Email] [WWW] [MSN] [ICQ]
RicardoCobain
JavaChild
[Avatar]

Membro desde: 21/06/2007 16:05:01
Mensagens: 147
Offline

Acho que esses APIs devem ter alguma configuração para carregar esse documento em Blocos... de 2 em 2 MB poe exemplo..
Isso existe quando se trabalha com XML.

Ricardo JL Rufino <ricardo.jl.rufino@gmail.com> < UNYK > :: CriativaSoft :: Teresina - PI
"Existe apenas um bem, o saber, e apenas um mal, a ignorância" - Sócrates
"Devemos julgar um homem mais pelas suas perguntas que pelas respostas" - Voltaire




Mentawai Developer

[Email] [MSN]
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

ou fazer tipo um flush()... sei lá, se a API não suporta fica mais dificil, mas ela deve suportar, se não é pegar no código e fazer umas alteraçãozinhoas

http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team