# Java Heap Space



## Benjamin (16. Feb 2010)

Hallo zusammen,

ich habe ein Problem mit dem Java Heap Space. Ich habe nun folgende Fragen dazu:

1.) Wie kann ich sehen, wie groß mein Heap Space im Augenblick ist?

2.) Wie kann ich den Heap Space vergrößern? Mein Programm soll von anderen Leuten 
     über Java Webstarter genutzt werden können. Wie vergrößere ich den Heap Space so, 
     das es bei den Nutzern automatisch auch gemacht wird. Ich will nicht das der Nutzer Argumente
     zum vergrößern des Heap Space angeben muss.

Ich bin gespannt auf Eure Antworten. 

Liebe Grüße Benjamin


----------



## Benjamin (16. Feb 2010)

```
_logClass.debug("Getting buffered input stream from remote connection");
            BufferedInputStream remoteBIS = new BufferedInputStream(conn.getInputStream());
//Problem dürfte irgendwo hier liegen
            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);//10240
            byte[] buf = new byte[1024];
            int bytesRead = 0;
            while(bytesRead >= 0)
            {
                baos.write(buf, 0, bytesRead);
                bytesRead = remoteBIS.read(buf);
            }

            byte[] content = baos.toByteArray();
            long timeTaken = System.currentTimeMillis() - startTime;
            if(timeTaken < 100) timeTaken = 500;
```


----------



## hemeroc (16. Feb 2010)

Ohne mir deinen Code anzusehen als Antwort auf deine erste Frage:


```
Runtime.maxMemory();
Runtime.freeMemory();
Runtime.totalMemory();
```

und zu deiner 2ten Frage:




			
				JavaDoc hat gesagt.:
			
		

> Is there a way to pass VM arguments to the Java Runtime?
> 
> Java Web Start allows certain JVM flags to be set with the java-vm-args attribute of the j2se element (see Developer's Guide). Allowing the complete set could compromise security as well as limit portability across different platforms and implementations. You can set the maximum and initial heap size using the initial-heap-size and max-heap-size attributes of the j2se element, for example:
> 
> <j2se version="..." max-heap-size="100M"/>



JavaTM Web Start version 1.5.0 - Frequently Asked Questions (FAQ)

LG Hemeroc


----------



## HoaX (16. Feb 2010)

Wenn du das SDK von Java6 installiert hast, so findest du dort auch ein Tool "jvisualvm", ne bunte GUI mit vielen Infos zu den laufenden Java-Anwendungen.


----------



## Benjamin (21. Feb 2010)

Hat jemand eine Ahnung von "ByteArrayOutputStream" irgendwo dort läuft der Heap Space über. 
Sind die 1024 das Problem? Oder muss ich den Puffer hier löschen?


```
BufferedInputStream remoteBIS = new BufferedInputStream(conn.getInputStream());

            ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);//10240
            byte[] buf = new byte[1024];
            int bytesRead = 0;
            while(bytesRead >= 0)
            {
                baos.write(buf, 0, bytesRead);
                bytesRead = remoteBIS.read(buf);
            }

            byte[] content = baos.toByteArray();
            long timeTaken = System.currentTimeMillis() - startTime;
            if(timeTaken < 100) timeTaken = 500;

            int bytesSec = (int)  ((double) content.length / ( (double) timeTaken / 1000.0) );
            System.out.println("Download: " + content.length + " bytes, " + bytesSec + " bytes/sec");
  
          
            if(content.length < conn.getContentLength())
            {
                 System.out.println("Didn't download all the content: " + url);

                failCount++;
                return null;
            }
            return new MyObj(requestedURL, conn.getContentType(), content, config, wla);
        }
```


----------



## Gelöschtes Mitglied 5909 (21. Feb 2010)

was spuckt denn die ausgabe zu content.length aus?

Du schreibst in einen ByteArrayOutputStream der natürlich die Daten im Speicher hält. Je nachdem wieviel du einliest kann das zu Problemen führen.

                baos.write(buf, 0, bytesRead);
                bytesRead = remoteBIS.read(buf);


Die beiden zeilen solltest du vertauschen

und die while schleife sollte auf != -1 prüfen


----------

