Habe ich eine JAXB-classloader Leck
Ich habe eine Anwendung bereitgestellt, die auf Glassfish. Im Laufe der Zeit die Anzahl der geladenen Klassen steigt in die Millionen, und meine permgen scheint zu steigen.
Zu beheben ich habe Folgendes in meinem jvm-Argumente.
-XX:+PrintGCDetails
-XX:+TraceClassUnloading
-XX:+TraceClassLoading
Nun, wenn gerade die Ausgabe, das sehe ich genauso-Klassen geladen werden, immer und immer wieder. Im Grunde jedes mal, wenn ein web-service aufgerufen wird und JAXB verwendet wird zum verarbeiten der xml.
[Geladen, com.strikeiron.ZIPCodesInRadius$JaxbAccessorF_userID von JVM_DefineClass]
[Geladen, com.strikeiron.ZIPCodesInRadius$JaxbAccessorF_userID von JVM_DefineClass]
Weist das auf ein Leck? Wenn ja wie löse ich es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich einen ähnlichen thread, der beschreibt das gleiche problem ich hatte.
http://forums.java.net/jive/thread.jspa?threadID=53362
Ich auch einen Fehler gefunden bei
https://github.com/javaee/jaxb-v2/issues/581
Grundsätzlich, das problem war, dass ich eine neue JAXBContext("Ihre.Klasse.xsd") jedes mal, wenn mein bean aufgerufen wurde. Nach dem Fehler "Aufrufen JAXBContext.newInstance(...) impliziert wieder alles da entweder die aktuelle oder die angegebene Klasse loader ist die (wieder-)verwendet".
War die Lösung zum erstellen einer singleton, die Super geklappt.
Und die Verwendung der singleton -
Dies ist einer der Gründe, warum ich bleiben Sie Weg von JAXB. Ich würde eher Klassen schreiben um marshal und unmarshal, die Umsetzung
javax.xml.bind.Marshaller
undjavax.xml.bindUnmarshaller
bzw. Ich schreiben Sie Sie einmal und Sie sind fertig. Keiner, der Reflexion und der dynamic-Klasse-generation.