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.
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.
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.
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:
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.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