Java heap space - Java - Portugal-a-Programar
By stein, June 17, 2009 in Java
Cumprimentos, eu tenho este metodo que me provoca o "java.lang.OutOfMemoryError: Java heap space" e ja experimentei aumentar a memoria disponível no projecto mas este acaba sempre por dar o mesmo erro, alguém tem alguma ideia de como optimizar o código de forma não "rebentar" a pilha?
line = readLine().trim();
if ((line.length() != 0) && (line.charAt(0) != '#')) {
Isso chega a parar? Não devias ter uma condição q verifica se encontrou EOF?
Nos ficheiros mais pequenos não é necessario, nos maiores ele nao consegue chegar ao fim por falta de memoria
Troca pela minha versão... embora dum ponto de vista lógico o teu ciclo tem as condições certas 🤔
troquei o StringBuffer por Builder, e não faço o line=line.substring...
já agora, põe um -Xmx grande mesmo, tipo -Xmx1024m
correr o código debaixo do profiler tb dava jeito. A SDK do Java 6 tem um chamado jvisualvm
StringBuilder buffer = new StringBuilder(); //Builder pq não preciso de sincronização, i.e., pq é só uma thread a lhe mexer
boolean endsWithBackslash;
boolean isComment;
boolean emptyLine;
emptyLine = (line.length()==0);
if(!emptyLine) {
endsWithBackslash = line.endsWith("\\");
isComment = line.charAt(0)=='#';
while(emptyLine || isComment || endsWithBackslash) {
if(endsWithBackslash && !isComment && !emptyLine)
buffer.append(line.substring(0,line.length()-1));
-Xmx1024m é capaz de ser um exagero...
Experimenta com valores mais baixos, começa em 128 e avança de 128 em 128...
Edit: não pude deixar de reparar que parece que estás a ler um ficheiro de settings, o Java já tem um objecto para ler e gravar de forma simples... Já agora, um ficheiro de settings que rebenta com a memória, cheira-me a esturro...
Eu estou a tentar ler as propriedades dos ficheiros, mas ja percebi que rebenta em ficheiros grandes como imagens(iso), mas no projecto que estou a desenvolver não preciso de ler esse tipo de ficheiros:D