Speicher voll, mit dem GC geht's daneben?

Status
Nicht offen für weitere Antworten.

nabla

Mitglied
Hi,

ich bekommte ein java.lang.OutOfMemoryError: Java heap space Fehler. Ja, ich lese mehrere grosse Dateien ein, nachdem sie aber bearbeitet wurden, sollten der Speicher aber freigegeben werden. Das Programm sieht folgendermassen (prinzipiell):
Java:
// set up citygml4j context
		CityGMLContext ctx = new CityGMLContext();
		CityGMLFactory citygml = ctx.createCityGMLFactory();

		// create a JAXBContext, an Unmarshaller and unmarshal input file
		JAXBContext jaxbCtx = ctx.createJAXBContext();
		Unmarshaller um = jaxbCtx.createUnmarshaller();

	
		File[] flist = new File("../datasets/West.gml/")
				.listFiles(new GMLFilenameFilter());

		final Runtime rt = Runtime.getRuntime();
		
		// here loop over citygmlfiles
		for (File file : flist) {

			JAXBElement<?> featureElem = (JAXBElement<?>) um.unmarshal(file);

			// map the JAXBElement class to the citygml4j object model
			CityModel cityModel = (CityModel) citygml.jaxb2cityGML(featureElem);

			CityGMLConverterThread cgmlct = new CityGMLConverterThread(uclm,
					soldner, cityModel);


			featureElem = null;
			cityModel = null;
			cgmlct = null;
//			System.gc();
			
			System.out.println(rt.freeMemory());
			System.out.println(rt.totalMemory());
			System.out.println(rt.maxMemory());
			System.out.println("+++++++++++++++++++++++++++");
			
		}

Die ersten befehle machen nicht viel, Speicher wird erst massig in der Schleife verbraucht. Die Schleife laeuft mehrmals durch (ueber 20 mal), es muesste also Speicher freigegeben werden. (Ja, in der Schleife wird auch nichts gerechnet, das habe ich fuer den Test entfernt). Die Ausgabe sieht so aus:
Java:
15336056
84410368
510984192
+++++++++++++++++++++++++++
41010384
104136704
510984192
+++++++++++++++++++++++++++
39990368
104136704
510984192
+++++++++++++++++++++++++++
50265792
131203072
510984192
+++++++++++++++++++++++++++
34429592
131203072
510984192
+++++++++++++++++++++++++++
....
+++++++++++++++++++++++++++
47839312
479264768
510984192
+++++++++++++++++++++++++++
50885368
510328832
510984192
+++++++++++++++++++++++++++
43980528
510328832
510984192
+++++++++++++++++++++++++++
43724560
510984192
510984192
+++++++++++++++++++++++++++

Was ist da los?

Danke!
 
Zuletzt bearbeitet:

Leroy42

Top Contributor
Der Aufruf der Methode System.gc() ist nur ein Hinweis an den
Garbage collector, daß er ab jetzt mal aufräumen könnte.

Sofort aufräumen muß er jedoch nicht!
 

musiKk

Top Contributor
Ein OutOfMemoryError fliegt nur, wenn kein Speicher nach einem Durchlaufen des GC freigegeben werden konnte (laut Doku). Ergo ist da trotzdem noch irgendwo ein Leak. Mit VisualVM kann man sich z. B. anzeigen lassen, wo viel Speicher verbraucht wird. Oder sicher auch mit anderen Profilern.
 

Murray

Top Contributor
Da die anderen Referenzen ja in der Schleife wieder genullert werden, könnte der Unmarshaller der Übeltäter sein. Erzeug den doch mal innerhalb der Schleife jedesmal wieder neu.
 
J

JohannisderKaeufer

Gast
Da die anderen Referenzen ja in der Schleife wieder genullert werden, könnte der Unmarshaller der Übeltäter sein. Erzeug den doch mal innerhalb der Schleife jedesmal wieder neu.

Das würde ich auch vorschlagen.

Das zeug, das in der Schleife null gesetzt wird, wird eh nach jedem Schleifendurchgang freigegeben, da es in der Schleife definiert wird.

Du kannst ja die Speicherstatistik direkt nach Schleifenbeginn ausgeben.
 

nabla

Mitglied
Das würde ich auch vorschlagen.

Das zeug, das in der Schleife null gesetzt wird, wird eh nach jedem Schleifendurchgang freigegeben, da es in der Schleife definiert wird.

Du kannst ja die Speicherstatistik direkt nach Schleifenbeginn ausgeben.

Vielen Dank, JohannisderKaeufer und Murray! Das scheint das Problem zu loesen. Ja, das mit dem null setzen der Variablen war nur, um wirklich sicher zu gehen und anzudeuten, warum ich denke, dass der Speicher freigegeben werden sollte.

Also nochmal vielen Dank an alle! :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Erste Schritte Speicher läuft voll, Diashow, Images Java Basics - Anfänger-Themen 7
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
L Frage zum Speicher bei Arrays Java Basics - Anfänger-Themen 7
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
TheSorm Problem mit Speicher Klasse Java Basics - Anfänger-Themen 3
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
H Methoden "Leeren" Speicher auf der Festplatte überschreiben Java Basics - Anfänger-Themen 8
C Variablen Speicher von Variablen erhöhen Java Basics - Anfänger-Themen 5
I Werte im Speicher auswerten ohne Umweg über eine Datei Java Basics - Anfänger-Themen 16
H Input/Output ImageIO.load frisst meinen ganzen Speicher weg! Java Basics - Anfänger-Themen 4
R Online-Speicher Java Basics - Anfänger-Themen 7
M Variablen speicher Java Basics - Anfänger-Themen 8
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
L Wieviel Speicher braucht ein Pixel? Java Basics - Anfänger-Themen 14
B Heap-Speicher wieder freigeben Java Basics - Anfänger-Themen 10
P Belegt "null" Speicher? Java Basics - Anfänger-Themen 25
C Soundwiedergabe in einem Thread - Speicher besser bereinigen Java Basics - Anfänger-Themen 3
H warum speicher und läd mien editor nicht? Java Basics - Anfänger-Themen 24
T MysqlConnect und Speicher Java Basics - Anfänger-Themen 8
hdi Programmier-Stil : Speicher vs. Quellcode Java Basics - Anfänger-Themen 67
G Button soll Speicher Dialog aufrufen Java Basics - Anfänger-Themen 10
N Probleme mit Input/OutputStreams, Daten im Speicher verwalte Java Basics - Anfänger-Themen 2
D nicht genug speicher - profiling trotz error Java Basics - Anfänger-Themen 5
A Problem mit nicht ausreichendem Speicher Java Basics - Anfänger-Themen 3
K speicher(String a, int b) Java Basics - Anfänger-Themen 14
N Zugriff auf Virtuelles Speicher Java Basics - Anfänger-Themen 18
J Belegter Speicher eines Ordners Java Basics - Anfänger-Themen 2
C args[] als statische Variablen speicher oder wie? Java Basics - Anfänger-Themen 12
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
A eingabe von jTextField lesen und speicher Java Basics - Anfänger-Themen 5
D Werte in Array speicher Java Basics - Anfänger-Themen 8
M Hilfe: Speicher freigeben? Java Basics - Anfänger-Themen 4
G Speicher als .txt -gibt ein Problem! Java Basics - Anfänger-Themen 6
A Speicher von VM ändern ohne Parameter Java Basics - Anfänger-Themen 3
S Speicher freigeben? Java Basics - Anfänger-Themen 5
T Größe eines Objektes im Speicher Java Basics - Anfänger-Themen 4
G Wieviel Speicher verbraucht ein Array? Java Basics - Anfänger-Themen 7
D Mit Java auf Speicher zugreifen Java Basics - Anfänger-Themen 3
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
Luk10 Nich voll belegte Arrays Java Basics - Anfänger-Themen 7
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
melisax Lower & Uppercase Beispielprogramm geht nicht Java Basics - Anfänger-Themen 3
MarcKKKK123 Wie geht das? Java Basics - Anfänger-Themen 1
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
W App geht live und dann? Java Basics - Anfänger-Themen 9
P Geht es vielleicht viel kürzer? Java Basics - Anfänger-Themen 7
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
S Geht das bei Java ? Java Basics - Anfänger-Themen 11
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
CptK Klassen KeyListner geht nicht Java Basics - Anfänger-Themen 7
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
S int addieren geht nicht Java Basics - Anfänger-Themen 13
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
S Komma geht beim Schreiben ins csv verloren. Java Basics - Anfänger-Themen 6
M Arrays einspeichern geht nicht Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
J Geht mit Java überhaupt was? Java Basics - Anfänger-Themen 13
J Debuggen - wie geht das? Java Basics - Anfänger-Themen 6
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
J Ausführen geht nicht Java Basics - Anfänger-Themen 19
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
I Java Code so gut es geht Kommentieren Java Basics - Anfänger-Themen 4
S Button "Berechnen" geht nicht Java Basics - Anfänger-Themen 3
B Compiler-Fehler Ein Java-Eclipse-Anfänger geht auf Reisen... Java Basics - Anfänger-Themen 10
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben