2
respostas

.replace() não funciona em arquivos grandes

No meu conversor de arquivos em Spring Batch, .replace("\n") .replaceAll, replace(Pattern.quote) e soluções com buffer e inputstream.... Nada funciona. essa solução: replace(Pattern.quote("\n"), "") e \r, funcionou para substituir as quebras de linhas de arquivos json pequenos, porém as outras formas de replace sequer substituiu as quebras de linha, porém a mesma solução, impede que o conversor sequer funcione para arquivos grandes (600mil Kb), mas a replaceAll funciona... Tentei muitas soluções e estou ficando sem esperança, o erro é: java heap space

2 respostas

Oi, Gabriela! Tudo bem?

A mensagem "java heap space" nos sinaliza que a JVM está sem memória heap disponível para executar a operação, o que ocorre quando estamos lidando com arquivos grandes, como nesse caso.

Caso o programa esteja tentando fazer a substituição de todas as quebras de linha de uma vez, isso pode causar um estouro de memória. Devido a isso, uma possível solução nesse caso é realizar essa substituição de forma incremental, lendo e escrevendo o arquivo em partes, em vez de carregá-lo inteiramente na memória. Isso pode ser feito utilizando um buffer.

Podemos, então, utilizar o BufferedReader pra ler em partes os arquivos e BufferedWriter para gravá-los em partes, reduzindo a quantidade de dados que está na memória de uma só vez.

Somado a isso, outra possível solução é aumentar o tamanho da heap da JVM, ou seja, aumentar a quantidade de memória disponível para a JVM usando as opções de linha de comando, como -Xmx e -Xms. Para isso, podemos utilizar o seguinte comando:

java -Xmx1024m -Xms512m -jar SeuAplicativo.jar

Esse comando aumentará o tamanho máximo da heap para 1024 megabytes e o tamanho inicial para 512 megabytes. Porém, podemos ajustar esses valores de acordo com a quantidade de memória disponível no nosso sistema.

Espero que essa soluções possam ajudar a resolver o problema!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Eu implementei essa solução anteriormente, continuo com o mesmo erro, também alterei no arquivo .ini. Na solução do buffer, ele quebra no .append, com o mesmo erro