NetBeans Profiler an Unittest anhängen

White_Fox

Top Contributor
Einen schönen Sonntag allerseits. :)

Mir läuft hier während eines-eigentlich simplen-Unittests der Speicher voll und irgendwann kommt eine OutOfMemory-Exception. Mit dem Debugger hab ich herrausgefunden, daß das Speichervollaufen während der AssertEquals-Methode (JUnit) stattfindet. Ich hab keine Idee, wo der Speicherüberlauf herkommt. Die Daten, die da verarbeitet werden, sollten nichtmal für ein paar MB reichen. Und die AssertEquals-Methode soll eigentlich nur zwei Strings vergleichen, einer wird direkt im Test initialisiert, der andere steckt hinter einigen Klassen (Class1.getClass2.getClass3.getString). Der Debugger braucht auch ewig, um den String anzuzeigen.
Sonderlich schön ist der Testcode so sicherlich nicht, aber ich sehe trotzdem nicht warum daß so lange dauert und soviel Speicher frisst.

Jetzt probiere ich zum ersten Mal den Netbeansprofiler aus, allerdings sagt der mir dauernd "No data collected yet" oder er findet keine main-Methode (logisch).

Hat jemand eine Idee, wie ich herrausfinde wo das Problem liegt? Wie kann ich denn einen JUnittest profilen? Duckduckgo hat auch keine Ahnung wer es wissen könnte. :(
 

httpdigest

Top Contributor
Ich weiß zwar nicht, wie es mit dem NetBeans-integrierten Profiler funktioniert, aber du kannst mit JProfiler ganz hervorragend Memory Profiling betreiben, kannst dir die Anzahl und Größe der alloziierten Objekte und Allocation Hot Spots (wo wird am meisten alloziiert) anzeigen lassen. Und das auch, selbst wenn der Test nur ein paar Millisekunde läuft und dabei hunderte Megabytes alloziiert. Du musst dich nur etwas mit JProfiler auseinandersetzen und die richtigen Einstellungen finden.

Einfacher wäre es aber fast bald, wenn du den gesamten Code einmal irgendwo (z.B. GitHub) oder hier als Artefakt zum Download zur Verfügung stellst. Dann kann man einmal schnell drauf gucken.
 

White_Fox

Top Contributor
Ich hab mir mal den JProfiler angesehen...scheint nett zu sein, aber da das nicht billig ist fällt das für mich als Option aus da ich hier grad nur meine Freizeit verbringe. Dann arbeite ich mich jetzt lieber in ein anderes Werkzeug ein das ich auch nach 30 Tagen (oder wie lange der Testzeitraum dauert) noch nutzen kann.

Das Programm werde ich irgendwann mal veröffentlichen, aber aktuell halte ich den Code noch nicht für vorzeigbar. Ich werde hier im Forum die Pre-Alphaversion reinstellen, weil mich mal die Kritik von Profis interessieren würde...aber jetzt noch nicht. Einzelne Codeschnipsel gerne.

Edit: Während ich das hier schreibe hab ich den Fehler gefunden (zu blöd Iteratoren vernünftig anzuwenden).

Das Thema Profiler interessiert ich aber immer noch, wenn jemand was weiß immer raus damit.
 

Ähnliche Java Themen


Oben