Czy możliwe jest wyświetlenie wszystkich odniesień do obiektu w czasie wykonywania?

Czy istnieje sposób, aby zobaczyć wszystkie odniesienia do obiektu w czasie wykonywania?

Używam Netbeans, czy ta funkcja istnieje w nim?

EDIT: nie ma problemu z używaniem do tego profilerów, potrzebuję tylko znać referencje, nie ma znaczenia jak.

Author: user1803551, 2011-05-27

4 answers

OK, Netbeans pokazuje wszystkie odniesienia do obiektu.

Najpierw uruchom projekt w trybie debugowania CTRL + F5, następnie pokaż załadowane klasy Alt + Shift + 4 lub Window->Debug->Loaded Classes.

Wybierz klasę, która będzie chciała zobaczyć referencje i kliknij na nią dwukrotnie.

Wstrzymaj egzekucję i jest.

Na górze znajdują się atrybuty obiektu, a na dole wszystkie odniesienia do niego.

W dolnym obszarze gdzie jest "Referências" pokazuje odwołania do wybranego obiektu

 14
Author: Renato Dinhani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-27 18:20:37

Jeśli zrzucisz stertę i przeanalizujesz ją, znajdziesz wszystkie referencje. Profilery takie jak VisualVM i YourKit mogą to zrobić za Ciebie.

Nie jest jednak możliwe określenie tego dynamicznie. Jeśli chcesz poznać wszystkie rzeczy, które odnoszą się do obiektu, musisz samodzielnie prowadzić zbiór tych rzeczy.

 12
Author: Peter Lawrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-27 17:03:57

W Netbeans możesz użyć funkcji Find Usages, aby zobaczyć, gdzie dana klasa może być odwołana wewnątrz konkretnego projektu.

Z Project Explorer Wybierz klasę i kliknij prawym przyciskiem myszy > Znajdź zastosowania.

Wyniki wyglądają trochę jak na poniższym obrazku:

Znajdź Wyniki Użytkowania

 7
Author: Vincent Ramdhanie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-27 17:14:13
Przepraszam, nie było jasne. Chcę referencje w czasie wykonania. Wszystkie odsyłacze do utworzonego obiektu

Niestety, nie ma takiej funkcji dostępnej w Javie. Istnieje jednak sposób powiadamiania, że nie ma już odniesienia do obiektu w czasie wykonywania.

Rozwiązaniem jest stworzenie słabego odniesienia do monitorowanego obiektu i powiązanie go z kolejką referencyjną . Gdy nie będzie już trudniejszego odniesienia do tego obiektu, GC prędzej albo później przypomnij sobie i spytaj o słabe odniesienie. Możesz to sprawdzić za pomocą isEnqueued () .

Jeśli podasz więcej informacji o swoim problemie, być może możemy dać więcej wskazówek i wskazówek.

EDIT

Aby kontrolować wszystkie odniesienia do obiektu, możesz użyć wzorca Proxy. Zamiast ustawiać odniesienia do obiektu połączenia, tworzy się obiekt proxy zawierający prywatną instancję obiektu połączenia. Następnie niech twój kod zadzwoni do proxy, który będzie wywołuje sam obiekt connection, zamiast mieć bezpośrednie odniesienia do połączenia.

Gdy skończysz z obiektem connection, zamknij go wewnątrz obiektu proxy. Jeśli Inne części kodu nadal próbują uzyskać dostęp do tych obiektów połączenia za pośrednictwem serwera proxy, będzie można go wykryć w serwerze proxy, gdy zostanie wywołany.

Jest to sztuczka, której możesz użyć, aby dowiedzieć się, która część kodu nadal "odwołuje się" do Twojego obiektu, że tak powiem.

Mam nadzieję, że to pomoże.
 5
Author: Jérôme Verstrynge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-27 18:02:18