2012-05-11 12 views
17

Pracuję nad aplikacją Java, która ma problem z wątkami.Wyszukiwanie źródła tworzenia wątków w aplikacji Java

Podczas korzystania z aplikacji przez jakiś czas z dołączonym profilerem Netbeans, widzę kilka wątków są tworzone. Większość z nich kończy się w niektórych .5 seconds. Mogłem znaleźć tylko SwingWorkers użyte w aplikacji.

Co więcej, większość wątków wyświetlanych przez profilera to zwykłe wątki, a nie SwingWorkers. O ile te wątki nie zostały stworzone pośrednio przez SwingWorker, podejrzewam, że pewna biblioteka, z której korzysta aplikacja, je tworzy.

Teraz chciałbym usunąć ten problem. Ale nie mogłem znaleźć sposobu na ustalenie źródła tworzenia wątku. Jeśli możesz zaproponować inny profiler/narzędzie, za pomocą którego mogę znaleźć źródło (method) tworzenia wątków.

+0

Czy bierzesz pod uwagę chwytając [bieżący ślad stosu ] [1] w konstruktorze twojego wątku? [1]: http://stackoverflow.com/questions/1069066/get-current-stack-trace-in-java – OldCurmudgeon

+0

@OldCurmudgeon Jak tylko zobaczyć wątki w wynikach profilera jest, nie wiem wiedzieć, kiedy i gdzie są tworzone wątki. Dlatego nie sądzę, że mogę go teraz użyć. Jednak gdy użyję profilerów wymienionych poniżej, mogę użyć go w niektórych zlokalizowanych przypadkach, jeśli jest to wymagane. Dzięki za link – Ankit

+0

Powiązane: http://stackoverflow.com/questions/9874641/tracking-java-thread-creation-and-lifetime –

Odpowiedz

9

Jeśli przy użyciu Eclipse i jego debugger jest opcja, można spróbować wykonać następujące czynności:

  • zaimportować kod do projektu Java.
  • Ctrl-Shift-T (typ otwarty), wprowadź "Wątek". Zostanie otwarty edytor źródeł binarnych dla klasy Thread.
  • Zaznacz wszystkie konstruktory nici w widoku schematu, użyj menu kontekstowego "Przełącz przełom metody". To tworzy punkty przerwania dla konstruktorów.
  • Uruchom i debuguj.

Alternatywnie

Można uzyskać Yourkit Java profiler, który jest również dostępny do oceny. Może wyświetlać wątki utworzone w aplikacji, w tym ich ślady stosu (również po zakończeniu wątku). Nie pokazuje, gdzie zostały utworzone wątki, ale ślad stosu wątków może dostarczyć wskazówek na temat zaangażowanych bibliotek.

+1

Wow, to jest świetna odpowiedź, to także uczenie jak poprawnie używać Eclipse i jak przydatne to może być. – dantuch

6

JProfiler może to zrobić. Widok monitora wątek pokazuje ślad stosu gdzie wątek został utworzony - jeśli nagrywanie CPU był aktywny w tym czasie:

enter image description here

Zastrzeżenie: Moja firma rozwija JProfiler

Powiązane problemy