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):
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:
Was ist da los?
Danke!
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: