Eines unserer Programme erhält manchmal einen OutOfMemory
Fehler auf dem Computer eines Benutzers, aber natürlich nicht, wenn ich es teste. Ich habe es nur mit JProfiler laufen lassen (auf einer 10-Tage-Testlizenz, weil ich es noch nie zuvor benutzt habe) und Filterung auf unserem Code-Präfix, der größte Teil sowohl in Gesamtgröße als auch Anzahl der Instanzen ist 8000 + Instanzen einer bestimmten einfachen Klasse .Wie kann ich herausfinden, was sich an unfreien Objekten festhält?
Ich klickte die "Garbage Collect" -Taste auf JProfiler, und die meisten Instanzen unserer anderen Klassen gingen weg, aber nicht diese besonderen. Ich habe den Test erneut ausgeführt, immer noch in der gleichen Instanz, und es hat 4000+ Instanzen der Klasse erstellt, aber als ich auf "Garbage Collect" geklickt habe, sind die 8000+ ursprünglichen davon verschwunden.
Diese Instanzen bleiben in verschiedenen Sammlungen in verschiedenen Phasen hängen. Ich nehme an, dass die Tatsache, dass sie nicht als Müll gesammelt werden, bedeuten muss, dass etwas einen Verweis auf eine der Sammlungen enthält, so dass ein Verweis auf die Objekte festgehalten wird.
Irgendwelche Vorschläge, wie ich herausfinden kann, was an der Referenz hält? Ich suche nach Vorschlägen, nach denen ich im Code suchen soll, und nach Möglichkeiten, dies in JProfiler herauszufinden, wenn es welche gibt.
führt Wenn Sie nach einem kostenlosen Profiler suchen, empfehle ich Ihnen, sich http://jiprof.sourceforge.net/ anzuschauen. Vielleicht ein bisschen altmodisch, keine schicke Gui und so weiter, aber in den meisten Fällen funktioniert es. – dhiller