Jump to content

Java heap space


stein
 Share

Recommended Posts

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?

public String readProperty() throws IOException {
            StringBuffer buffer = new StringBuffer();
            String line;

            try {

                while (true) {

                    line = readLine().trim();

                    if ((line.length() != 0) && (line.charAt(0) != '#')) {
                        if (line.endsWith("\\")) {
                            line = line.substring(0, line.length() - 1);
                            buffer.append(line);
                        } else {
                            buffer.append(line);
                            break;
                        }
                    }
                }

            } catch (NullPointerException e) {
                return null;
            }

            return buffer.toString();
        }



    }

thanks:)

Link to comment
Share on other sites

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

public String readProperty() throws IOException {
   StringBuilder buffer = new StringBuilder(); //Builder pq não preciso de sincronização, i.e., pq é só uma thread a lhe mexer
   String line;

   boolean endsWithBackslash;
   boolean isComment;
   boolean emptyLine;

   line = readLine().trim();
   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));

         line = readLine().trim();
         emptyLine = (line.length()==0);
         if(!emptyLine) {
             endsWithBackslash = line.endsWith("\\");
             isComment = line.charAt(0)=='#';
         }
   }

   buffer.append(line);

   return buffer.toString();
}
   
Tharis Fan ClubMay Tharis bless you
Link to comment
Share on other sites

-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...

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.