Arbeitsspeicher-Verbrauch bei Anzeige eines 10MP-Bildes

Status
Nicht offen für weitere Antworten.

*Blue$creEn*

Mitglied
Guten Tag allerseits

Ich versuche gerade ein Applet zu schreiben, in dem u.a. ein Bild angezeigt und bearbeitet wird.
Testweise lasse ich das Bild über folgende Zeilen anzeigen:
Code:
URL url = new URL(getCodeBase(),"test.jpg");
image = new ImageIcon(url);
add (new JLabel(image));
Meiner Rechnung nach sollte das Bild bei 24bit Farbtiefe ca. 28 MB RAM belegen. Aber ein Applet, dass nur o.g. drei Zeilen enthält, frisst ganze 130 MB Arbeitsspeicher. Warum?
Insgesamt 60 MB für Pufferung oder ähnliches finde ich ja noch OK, aber gleich das vierfache?! Bei vielen Andwendern wird dies zu einem OutOfMemory-Fehler führen. Verwende ich die falschen Klassen für meine Zwecke? Oder habe ich eine inkonsistente Java-Version (1.6.0_10-beta)?
Ideen?

PS: Ich habe http://www.java-forum.org/de/viewtopic.php?t=24130&postdays=0&postorder=asc&start=15 gelesen, doch dort gibt es ein anderes Problem.
 

tincup

Bekanntes Mitglied
1. Oft kann man nicht wissen, was Java intern in seinen Klassen noch so treibt.

2. Woher weisst du, dass es genau 130 MB sind? Womit hast du das gemessen? Einfach nur die Ausgabe von "top" oder Windows-Task Manager oder so kann zu Fehleinschätzungen führen.
 

Wildcard

Top Contributor
Wieviel Speicher solch ein Bild belegt hängt zum einen von der Größe, zum anderen von der Farbtiefe und zu einem großen Teil vom verwendeten ColorModel ab.
 

Janus

Bekanntes Mitglied
auflösung x farbtiefe ist nur der minimale speicherbedarf eines unkomprimierten bildes im speicher. dazu kommt dann noch beliebig viel overhead für klassen & co.

außerdem hat die JVM spezifikation noch ein "unschöne" eigenart: primitive typen haben zwar immer fest definierte wertebereiche, aber trotzdem ist nicht garantiert, dass z.b. ein 32 bit integer (int) auch tatsächlich nur 32 bit im speicher belegt. eine VM könnte primitive vom typ int auch als 64 bit integer im speicher repräsentieren.

auch aus diesem grund gilt in java eigentlich die grundregel, dass man den speicherbedarf einer struktur nicht vorhersagen kann.
 

*Blue$creEn*

Mitglied
Die 130 MB habe ich in der Tat mit dem TaskManager abgelesen. Auch wenn das nicht exakt stimmt, ist es für nur ein Bild zu viel.
Im offiziellen Java-Release 1.6.0_05 tritt dieser Fehler nicht auf: Der Windows Task-Manager zeigt 65MB Speichernutzung an, allerdingsläuft dieses Test-Applet im Browser nicht, weil javaplugin.maxHeapSize den Speicher auf 64M beschränkt (so wurde ich auf das Problem aufmerksam). Kann ich diese Beschränkung ändern?
So weit Danke für eure fachkundigen Meinungen, aber was kann ich denn tun?
 

Wildcard

Top Contributor
Die Beschränkung kannst du mit Webstart aufheben.
Vielleicht sollte es aber doch lieber ein anderes ColorModel sein?
 

Janus

Bekanntes Mitglied
halte im speicher stets nur den sichtbaren anteil des bildes vor. sollte der anwender "zoomen", reduziere die auflösung des bildes vor bzw. während des ladens.

das ergebnis ist aller wahrscheinlich nach wenig performant und die lösung alles andere als trivial.

die einfachste lösung ist wahrscheinlich, die speicherbegrenzung der VM vor start zu prüfen und bei zu geringem speicher einen entsprechenden warnhinweis auszugeben. schwarzer peter dem anwender zugeschoben ;)
 

tincup

Bekanntes Mitglied
Generell wenn du dir nicht sicher bezüglich des tatsächlichen Speicherverbrauchs bist: Profiler drauf losschicken. Nur sind die halt meist weder vorinstalliert noch auf sehr einfachem Wege schnell zu installieren.
 

tincup

Bekanntes Mitglied
Das kannst du leider nicht. Der "Aufruf" des Garbage Collectors ist eher eine Empfehlung an die VM, dass jetzt ein guter Zeitpunkt wäre. Ohne Garantie, dass er wirklich läuft. Wenn du aber eine entsprechende Heap-Space Beschränkung eingestellt hast, schaltet der sich schon im richtigen Moment ein.
 

*Blue$creEn*

Mitglied
Janus hat gesagt.:
halte im speicher stets nur den sichtbaren anteil des bildes vor.
das ist eine gtue idee, die mir sehr weiterhilft. bisher habe ich das bild immer in voller größe an das darstellende objekt gegeben. wenn ich vorher eine scaledinstance erstelle, sinkt der gesamtspeicherbedarf etwas.
ich bastel erstmal weiter.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Arbeitsspeicher nach kompilieren immer voller Java Basics - Anfänger-Themen 6
G Lastet dieser Code den Arbeitsspeicher eines Handys aus? Java Basics - Anfänger-Themen 7
T Arbeitsspeicher wieder freigeben Java Basics - Anfänger-Themen 21
S Arbeitsspeicher überladen Java Basics - Anfänger-Themen 22
I Zu wenig Arbeitsspeicher Java Basics - Anfänger-Themen 9
L Wieviel Platz belegt Java standardmäßig im Arbeitsspeicher? Java Basics - Anfänger-Themen 4
T Feststellen wie viel Arbeitsspeicher belegt ist Java Basics - Anfänger-Themen 2
R Arbeitsspeicher Java Basics - Anfänger-Themen 14
K RAM - Verbrauch von "Hello World" minimieren. Java Basics - Anfänger-Themen 6
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
Elyt Würfel mit bildlicher Anzeige Java Basics - Anfänger-Themen 2
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Anzeige Fehler auf anderem Gerät Java Basics - Anfänger-Themen 1
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
Hijo2006 Anzeige eines Bildes in JAR Java Basics - Anfänger-Themen 12
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Anzeige fehler eines Buttons Java Basics - Anfänger-Themen 3
C Erste Schritte Berechnen einer Form mit Live anzeige.... Java Basics - Anfänger-Themen 4
H pdf-Anzeige Java Basics - Anfänger-Themen 11
J Anzeige erneuern, wie geht das? Java Basics - Anfänger-Themen 6
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
FetterOtter JTable: ToolTipText-Anzeige abhängig von Zellengröße und Textlänge Java Basics - Anfänger-Themen 2
S Probleme bei der Gui Anzeige Java Basics - Anfänger-Themen 11
S JPanel anzeige Java Basics - Anfänger-Themen 2
K Erste Schritte prob anzeige Java Basics - Anfänger-Themen 4
P Labyrinth, Backtracking, verzögerte Anzeige Java Basics - Anfänger-Themen 15
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
1 Combobox anzeige Java Basics - Anfänger-Themen 7
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
D DB Anzeige der Treffer Java Basics - Anfänger-Themen 12
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
S Zeitpunkt für die Anzeige von setBackground Java Basics - Anfänger-Themen 2
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
B double Rundungsfehler od. Anzeige-Fehler? Java Basics - Anfänger-Themen 4
D GUI Anzeige fehlt Java Basics - Anfänger-Themen 4
C Probleme mit Exportieren einer jar-datei /keine Anzeige mehr Java Basics - Anfänger-Themen 5
hdi Konsole basteln -> wie die Anzeige des Inhalts realiseren Java Basics - Anfänger-Themen 3
G Problem mit Anzeige der Tabelle Java Basics - Anfänger-Themen 3
G Ebenen Verwaltung und Anzeige Problem Java Basics - Anfänger-Themen 6
G JFileChooser - Anzeige beschleunigen Java Basics - Anfänger-Themen 2
O Anzeige von Zeichen in einer JList Java Basics - Anfänger-Themen 5
G 9-Segment-Anzeige Java Basics - Anfänger-Themen 7
B Java - Anzeige beim Refresh weiss Java Basics - Anfänger-Themen 11
T Keine Anzeige in JList Java Basics - Anfänger-Themen 18
B unvollständige Anzeige von JComboBox Werten Java Basics - Anfänger-Themen 5
C Taschenrechner -> Anzeige/Variablen Problem Java Basics - Anfänger-Themen 9
S JTextArea Problem mit Anzeige Java Basics - Anfänger-Themen 2
A Datei einlesen und Inhalt in verschidenen JList anzeige? Java Basics - Anfänger-Themen 3
G Array anzeige nur letzter wert Java Basics - Anfänger-Themen 2
M Keine Anzeige, wenn ich die Classe umbenenne Java Basics - Anfänger-Themen 13
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
G Problem mit JPanel, bekomme keine Anzeige! Java Basics - Anfänger-Themen 4
I Classpath Anzeige Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben