Frage

Ich bin versucht, ein sehr großes Bild in Java erstellen wie folgt:

BufferedImage bi = new BufferedImage (58240, 1664, BufferedImage.TYPE_INT_RGB);

offensichtlich das Bild ist sehr groß.

Nun ist die Frage, die ich habe, ist, dass es in Ordnung zu 100% auf einigen Computern aber wirklich langsam auf anderen scheint zu funktionieren (und nein, das hat nichts mit Spezifikationen zu tun).

Mein meisten großen Durchbruch in Eclipse kam, weigerte sich die IDE, um tatsächlich das Bild anzuzeigen und stattdessen warf der Computer einen Fehler auf der einen, die das Bild zeigt wirklich langsam (nimmt eine beträchtliche Menge an Zeit, um das Bild und dergleichen, um die Größe) :

Exception in thread "AWT-Eventqueue-0" java.lang.OutOfMemoryError: Java Heap-Speicher

Ein weiteres interessantes Element des Fehlers ist, dass auch auf den Rechnern läuft es langsam auf ich die Größe des Fensters kann es in, bis die Farbe Funktion wird nicht mehr aufgerufen wird, dann ist es wieder groß machen, und wenn ich es tun ‚richtig‘ es läuft mit 100% der Geschwindigkeit.

Nicht sicher, was überhaupt los ist, irgendwelche Ideen?

War es hilfreich?

Lösung

Ihre App aus dem Speicher ausgeführt wird - wenn ich es richtig berechnet, dass Bild dauert etwa 280MB.

Java-Programme haben eine maximale Speichermenge sie erlaubt sind zu verwenden (Heap-Speicher), die festgelegt wird, wenn die JVM gestartet wird, und wie sich diese Grenze gesetzt wird, variiert zwischen JVM Implementierung und Versionen. Wenn Sie aus dem Speicher oder in der Nähe der Grenze laufen, wird die JVM eine Menge Zeit damit verbringen, die Garbage Collection zu tun, was es deutlich verlangsamen wird.

Es kann sein, dass das einzige, was Sie tun müssen, ist die App mehr Heap-Raum zu geben; dies geschieht mit dem -Xmx Kommandozeilenparameter .

Andere Tipps

Das Problem mit der Heap Größe der Java Virtual Machine ist -. Es nur auf den Systemen nicht genug, dass der OutOfMemoryError wirft

Wenn das Problem auftritt, wird mit Systemen der Sun JVM ausgeführt wird, ist es möglich, durch Verwendung von Sun JVM-spezifische Optionen .

Wie von Suns Java 6, die Standardwerte für die Speichergröße wird von der Größe des Systemspeicher bestimmt, sondern wird auch durch die -Xms Option außer Kraft gesetzt werden, die die minimale Speichergröße verändert, und -Xmx, der die maximale Speichergröße ändert. Standardmäßig ist Mindestspeichergröße 1/64 der Menge an physikalischem Speicher und maximal 1/4 der Menge an physikalischem Speicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top