Boa tarde;
Preciso ler 80000 linhas em um txt, e armazenar em um objeto para cada linha.
Está dando estouro de memoria …
Como vc esta rodando esta classe ? Tem um método main ? Qual a configuração de memória da sua JVM ?
Main
Qto a configuração da memoria…
Se vc esta rodando direto pelo eclipse é preciso ir em Run >> Run Configurations >> achar a sua classe e depois adicionar as seguintes linhas dentro do VM Arguments
-Xmx1024m -Xms512m
Com isso vc diz para a sau JVM quanto de memória ela poderá usar…se não me engano por padrão a JVM usa apenas 64m (não me lembro)
Agora se vc executa pela linha de comando (no DOS por exemplo) teria q usar:
java -Xms256m -Xmx1000m suaClasse
entendeu !?!?!?
Com certeza, entendi…
Vou configurar…
Qto ao armazenamento de 100 em 100, torna-se necessário???
Estou rodando no Eclipse…
[quote=andsuriano]Com certeza, entendi…
Vou configurar…
Qto ao armazenamento de 100 em 100, torna-se necessário???[/quote]
Olha eu estou trabalhando com um arquivo, neste exato momento, com 214.000 linhas e com umas 700 colunas em média para cada linha.
Usando os argumentos de memória não precisei ficar quebrando o processo em vários pedaços…acredito que vc tb não precise.
Configurei, vou testar…
No meu TCC eu tive que criar algo parecido. Eu precisava transformar varias partidas de xadrez em formato png texto em objetos java.
Eu tive que criar 100 mil objetos, sendo que cada objeto tinha uma árvore interna de outros objetos que referenciavam as objetos jogadas daquela partida.
O problema dessa modelagem consiste que o processamento e o tempo gasto no load das partidas era considerável.
Para resolver esse problema, que está parecendo um pouco com o seu, eu simplesmente Serializei todos os objetos Java e salvei em disco, e quando
era preciso eu simplesmente deserializava toda a estrutura. Com isso o tempo gasto em carregar todos os objetos Java diminuiu consideravelmente.
Tente serializar seus 80 mil objetos e salvar em disco e quando for necessário deserializa, assim você economiza tempo e processamento.
Claro que considerando que seu arquivo texto não muda frequentemente.
As validações que ocorrem são tantas que demora cerca de uma hora para validar tudo…está na 1300 …
Ainda nao deu estouro…
Como serializo??? Tem exemplo utilizado???
nossa… mesmo com inumeras validações nao era pra demorar tanto assim… 1000 linhas por hora Oo
que validações está fazendo? ta fazendo do melhor jeito possivel? ta ignorando outras validações qndo a primeira ja da erro? se o problema está nas validações serializar nao vai mudar muito nao…
Um exemplo bem simples:
http://www.devmedia.com.br/post-3050-Introducao-a-serializacao-de-objetos.html
Isso é apenas uma sugestão, mas se acaso você não conseguir construir e serializar
os 80 mil objetos de uma vez, tente apenas pegar um conjunto desses 80 mil, carregar e
salvar em disco e assim até terminar todos os objetos.
Uso validadores
Esta muito lenta…3000 agora…duas a cada segundo…
Como podem observar devo gerar dois xml’s com corretos e errados…
Cara, certa vez eu precisei retirar informações de arquivos de texto( milhares deles) em lote, estava demorando demais, pois a operação consistia em abrir o arquivo, retirar todos os caracteres e obter as informações necessárias.
Para melhorar o desempenho, eu coloquei toda a operação de extração e filtro dentro de um método static, a performance ficou 200% melhor.
Utilizei o JDom…
Funcionou perfeitamente…
[quote=andsuriano]Utilizei o JDom…
Funcionou perfeitamente…
Como faço para atualizar um nó especifico de um cpf, que está no xml com JDom???
Obrigado pelas ajudas, foram de grande valia…
[/quote]
Para trabalhar internamente com XML, você pode usar as linguagens XQuery e XPath.
Se fosse no SQL Server, iria conseguir lhe ajudar a atualizar um nó específico usando modify.
Tem alguma outra forma???