Speicher freigeben klappt nicht bei Image Objekten, warum?

Status
Nicht offen für weitere Antworten.
H

HaraldM

Gast
Hallo,

ich lade in meiner Software ein Image und habe das Problem, dass Java den Speicher nicht wieder freigibt.

Mein Quelltext sieht wie folgt aus (leicht vereinfacht ;-)

Code:
...
ImageIcon ii = new ImageIcon("c:\\image.jpg");
...

Das JPEG ist ca 3 MB groß und wenn Java es lädt, braucht es dafür rund 60 MB (das ist auch völlig ok so). Das Problem ist nun, dass Java diese 60 MB nicht mehr freigibt obwohl ich im späteren Quelltext nie mehr das ImageIcon Objekt benutze.

System.gc() hilft auch nicht und es ist auch egal was für und wieviel Quelltext ich vor dem Initialisieren des ImageIcons habe. Die obige Zeile beansprucht 60 MB - dauerhaft.

Wißt ihr, wie ich den Speicher wieder freigeben kann?

Viele Grüße
Harald

P.S: Interessant ist in dem Zusammenhang auch, dass wenn ich das Image in einer grafischen Benutzeroberfläche lade und diese Oberfläche von Hand minimiere, der Speicher auf 4 MB abfällt und das obwohl ich das ImageIcon später in einer Methode nochmal verwende (maximiere ich die Gui wieder, bleibt es trotzdem bei den 4 MB)
 

Jockel

Top Contributor
Der Aufruf von System.gc() ist ja auch nur ein 'Vorschlag' an die VM, nicht benutzte Objekte zu entfernen.
Außerdem widersprichst du dir etwas:
"obwohl ich im späteren Quelltext nie mehr das ImageIcon Objekt benutze"
"obwohl ich das ImageIcon später in einer Methode nochmal verwende "
 
H

HaraldM

Gast
zu dem widerspruch: das obere beispiel dient nur zur veranschaulichung - wozu sollte ich ein Objekt initialisieren, wenn ich es nie benutze (aber der speicher wird halt auch in diesem "sinnlosen" fall nicht freigegeben
 
R

Roar

Gast
wahrscheilnich weil du noch eine referenz auf das objekt hast. solang du noch eine referenz hast, wird der speicher nicht freigegeben. hast du das objekt evtl als instanzvariable? wenn ja ist es nicht möglich das objekt als lokale variable zu deklarieren und zu benutzen?
 
G

Gast

Gast
könnte ich denn die referenz auf das objekt irgendwie manuell löschen?
 

messi

Bekanntes Mitglied
System.gc() ist kein Vorschlag an die VM, sondern es wird wirklich eine Garbage Collection durchgeführt.
Außerdem meinst du sicherlich den echten Speicher, den die VM belegt und nicht das Objekt. Dieser Speicher ist nicht verkleinerbar. Er kann nur größer werden.
 

Jockel

Top Contributor
messi hat gesagt.:
System.gc() ist kein Vorschlag an die VM, sondern es wird wirklich eine Garbage Collection durchgeführt.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#gc() hat gesagt.:
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse.
 
G

Guest

Gast
Eine gute Lösung ist, mit WeakReference oder SoftReference zu arbeiten.
Wird der Speicher knapp, werden die referenzierten Objekte freigegeben.
 

Bleiglanz

Gesperrter Benutzer
wahrscheinlich wirst du doch das bild irgendwo anzeigen?

und diese anzeigetafel hat eine referenz auf das imageicon

und diese referenz musst du loswerden
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
L JVM: Speicher wieder für OS freigeben? Allgemeine Java-Themen 5
C Virtueller Speicher Allgemeine Java-Themen 36
sascha-sphw Auf GoPro Speicher zugreifen Allgemeine Java-Themen 10
TheJavaKid Mit Java die Festplatte mit dem meisten freien Speicher finden Allgemeine Java-Themen 7
J Strings int textdokumente speicher Allgemeine Java-Themen 3
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
L Input/Output Datei in den Speicher lesen. Allgemeine Java-Themen 9
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
M Speicher der VM Allgemeine Java-Themen 4
W PDFBox "Nicht genügend Speicher" Allgemeine Java-Themen 2
S Speicher-Problem Allgemeine Java-Themen 4
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
V Input/Output BufferedI/OStream leert den Speicher Allgemeine Java-Themen 7
G Speicher erhöhen Allgemeine Java-Themen 10
R Programm frisst 'Virtuellen Speicher' wie PacMan Allgemeine Java-Themen 4
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
A 2D-Grafik 2MB jpg wird zu 300MB im speicher (fehler) Allgemeine Java-Themen 8
E Speicherverwaltung bzw. Speicher wieder frei geben?! Allgemeine Java-Themen 8
D Speicher beim Start zuweisen Allgemeine Java-Themen 10
S Bei Sortierung Speicher zu gering? Allgemeine Java-Themen 8
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
S JAR Datei, mehr Speicher bereitstellen Allgemeine Java-Themen 5
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
E Speicher frei machen (List) Allgemeine Java-Themen 9
J Speicher Probleme vorbeugen Allgemeine Java-Themen 8
C Laden / Speicher Allgemeine Java-Themen 8
R Eigener Assoziativ-Speicher Allgemeine Java-Themen 7
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
S Zugesicherter Speicher der jvm nach Programmstart erhöhen Allgemeine Java-Themen 6
G FIFO Speicher nachbilden Allgemeine Java-Themen 2
G restlichen freien Speicher ermitteln? Allgemeine Java-Themen 3
J Wieviel Speicher maximal? Allgemeine Java-Themen 14
T Sortierter assoziativer Speicher mit Filter Allgemeine Java-Themen 4
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
O Datei im Speicher halten Allgemeine Java-Themen 4
C Speicher Problem Allgemeine Java-Themen 3
S TreeSet benötigt zu viel Speicher Allgemeine Java-Themen 5
J Out Of Memory - Speicher vergrößern? Allgemeine Java-Themen 2
L Nutzt Java bei Start der VM übermäßig viel Speicher? Allgemeine Java-Themen 3
F CPU auslastung wenn Speicher mit -Xmx erhöht Allgemeine Java-Themen 4
S Auslagerungsdatei (Speicher) werde voll Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
S Speicher Allgemeine Java-Themen 2
m@nu doppelte daten im speicher? Allgemeine Java-Themen 2
G Speicher Allgemeine Java-Themen 3
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
A Speicher/Anzeige Problem in JTable Allgemeine Java-Themen 2
D Speicher der VM für ausführbares Jarfile erhöhen Allgemeine Java-Themen 4
D Eine geladene Klasse aus dem Speicher holen? Allgemeine Java-Themen 9
J in file schreiben frisst den speicher Allgemeine Java-Themen 5
P benötigter Speicher für Objekt Allgemeine Java-Themen 5
D Wieviel Speicher kann die VM verwalten? Allgemeine Java-Themen 18
C Über C/C++ (JNI) angeforderten Speicher wieder frei geben Allgemeine Java-Themen 3
B Kostet das speichern von Variablen zusätzlichen speicher? Allgemeine Java-Themen 2
T Speicher für die VM ändern Allgemeine Java-Themen 17
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
H Wie Cpu- und Speicher- Auslastung in Java auslesen Allgemeine Java-Themen 4
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2
C RAM Speicher in Datei auslagern (Java Swapping) Allgemeine Java-Themen 4
N Speicher Problem bei grossem Heap Allgemeine Java-Themen 15
S Speicher reservieren Allgemeine Java-Themen 5
R nichtmehr benötigtes BufferedImages aus dem Speicher entfern Allgemeine Java-Themen 4
B Datei überprüfen, ob diese Freigeben ist oder fertig geschrieben wurde Allgemeine Java-Themen 3
I PDF freigeben zum löschen Allgemeine Java-Themen 4
S Klasse für GC freigeben Allgemeine Java-Themen 24
M Wie externe System-Ressourcen zwangsweise freigeben Allgemeine Java-Themen 2
D Bildercache mit flush freigeben? Allgemeine Java-Themen 13
L Speicherplatz eies RIESEN objektes direkt wieder freigeben Allgemeine Java-Themen 5
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
F URI mit Parameter klappt nicht Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
K Eingabe mit Char vergleichen klappt nicht! Allgemeine Java-Themen 2
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java Dateidownload klappt bei einigen Datein nicht Allgemeine Java-Themen 7
F Input/Output "transient" klappt nicht wie gewünscht Allgemeine Java-Themen 1
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
T JavaScript put klappt nicht Allgemeine Java-Themen 6
K Copy/Paste klappt nicht einwandfrei Allgemeine Java-Themen 15
M Datums vergleich klappt überhaupt nicht.. Allgemeine Java-Themen 4
Z Desktop anzeigen + Screenshot klappt nicht Allgemeine Java-Themen 3
B Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec? Allgemeine Java-Themen 13
T Java in Website einbinden klappt i-wie nicht Allgemeine Java-Themen 13
K datenübernahme klappt und klappt nicht Allgemeine Java-Themen 5
R import von Jasper (für SICStus Prolog) klappt nicht Allgemeine Java-Themen 2
J importjava.utilArrayList; klappt nicht Allgemeine Java-Themen 2
B Browserstart klappt nicht mit JAR Allgemeine Java-Themen 5
0 Runtime.exec() VLC starten klappt nicht Allgemeine Java-Themen 9
H2SO3- Warum klappt DateFormat MM.dd.yyyy bei 15.11.2003 Allgemeine Java-Themen 2
T Button Array verschieben klappt nicht. Allgemeine Java-Themen 6
H this klappt nicht Allgemeine Java-Themen 10
Y PropertyMap: Zugriff über konkatenierten String klappt nicht Allgemeine Java-Themen 7
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
L Vererbung klappt nicht Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben