Hallo,
ich habe eine Frage zur Speicherverwaltung. Ich entwickle normalerweise mit Objective-C und bin es gewohnt Objekte von Hand zu releasen. In Java blicke ich nicht ganz durch. Mir kommt die GC sehr willkürlich vor.
Ich schriebe gerade ein Programm das eine Klasse besitzt welche zB ein 2000x2000 Pixel großes BufferedImage erstellt (4Byte Typ wegen Transparenz).
Von der Klasse existieren sagen wir mal 10 Instanzen. In einer for Schleife rufe ich jede dieser Instanzen auf und speichere das erzeugte Bild als PNG ab.
Nun ist aber regelmäßig nach dem 3 manchmal auch 4 Bild der Speicher voll und das Programm bricht den Export Vorgang ab. Wenn ich den Heap Speicher erhöhe geht es wieder nur ist das Problem ja grundsätzlich nicht gelöst.
Eigentlich müsste man doch die Möglichkeit haben:
for-Schleifen Durchgang 1: Bild erzeugen - Bild speichern - Bild aus dem Speicher löschen
for-Schleifen Durchgang 2: Bild erzeugen - Bild speichern - Bild aus dem Speicher löschen
Somit könnte man beliebig viele Bilder hintereinander speichern. Denn die Bilder selbst sind alle gleich groß. Wenn eines erfolgreich abgespeichert wurde müssten ja auch alle anderen passen.
Momentan rufe ich in jedem for Schleifen Durchlauf zu Beginn System.gc() auf und am Ende setze ich das BufferedImage null. Was kann man noch tun?
Und ein weiteres Problem habe ich mit Threads, wenn ich die for Schleife in einem Thread ausführe komme ich noch viel schneller an Speichermaximum. Wie löscht man einen benutzten Thread vollständig aus dem speicher?
Danke für eventuelle Hilfe
Grüße Maverick85
ich habe eine Frage zur Speicherverwaltung. Ich entwickle normalerweise mit Objective-C und bin es gewohnt Objekte von Hand zu releasen. In Java blicke ich nicht ganz durch. Mir kommt die GC sehr willkürlich vor.
Ich schriebe gerade ein Programm das eine Klasse besitzt welche zB ein 2000x2000 Pixel großes BufferedImage erstellt (4Byte Typ wegen Transparenz).
Von der Klasse existieren sagen wir mal 10 Instanzen. In einer for Schleife rufe ich jede dieser Instanzen auf und speichere das erzeugte Bild als PNG ab.
Nun ist aber regelmäßig nach dem 3 manchmal auch 4 Bild der Speicher voll und das Programm bricht den Export Vorgang ab. Wenn ich den Heap Speicher erhöhe geht es wieder nur ist das Problem ja grundsätzlich nicht gelöst.
Eigentlich müsste man doch die Möglichkeit haben:
for-Schleifen Durchgang 1: Bild erzeugen - Bild speichern - Bild aus dem Speicher löschen
for-Schleifen Durchgang 2: Bild erzeugen - Bild speichern - Bild aus dem Speicher löschen
Somit könnte man beliebig viele Bilder hintereinander speichern. Denn die Bilder selbst sind alle gleich groß. Wenn eines erfolgreich abgespeichert wurde müssten ja auch alle anderen passen.
Momentan rufe ich in jedem for Schleifen Durchlauf zu Beginn System.gc() auf und am Ende setze ich das BufferedImage null. Was kann man noch tun?
Und ein weiteres Problem habe ich mit Threads, wenn ich die for Schleife in einem Thread ausführe komme ich noch viel schneller an Speichermaximum. Wie löscht man einen benutzten Thread vollständig aus dem speicher?
Danke für eventuelle Hilfe
Grüße Maverick85