2011-09-21 14 views
5

Czy istnieje sposób, w jaki sposób uzyskać historię obiektów (ich zmienne lub przynajmniej nazwy klas), które zostały śmieci zebrane w Javie?Jak sprawdzić, jakie obiekty zostały zebrane śmieci w Javie?

Wystarczy dodanie tych params (Oracle JVM)

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 

nie zapewniają niczego innego pamięci w bajtach. To bardzo ograniczona pomoc dla mnie. Dzięki za wszystkie odpowiedzi.

Uwaga: Obejście z metodą dodawania finilize() nie jest dla mnie niestety pewną opcją (nie mam do niego dostępu).

Odpowiedz

3

Zastrzeżenie: Moja firma opracowuje narzędzie, które polecam w tej odpowiedzi.

W JProfiler możesz przejść do widoku "Obiekty nagrane" w sekcji pamięci i przełączyć tryb życia na śmieci zebrane obiekty (Widok-> Zmień tryb życia-> Garbage Collected Objects). Następnie zobaczysz statystyki obiektów, które zostały GCed.

enter image description here

+1

Dzięki. JProfiler wygląda świetnie, ale 450 € jest zbyt drogie –

+0

Czy istnieje sposób na programową listę zajęć? Przechodziłem przez pakiet java.lang.Management, ale może on zwracać tylko liczbę. – meexplorer

+0

Masz na myśli JProfiler lub MBean JDK? –

3

Można użyć metody finalize od Object. Ta metoda jest wywoływana, gdy obiekt ma zostać GCed. Stąd możesz rejestrować potrzebne informacje.

0

Poszukujesz wycieku pamięci?

Jeśli zastosujesz metodę finalize() (dostępną w każdym), zostanie ona wywołana tuż przed zbiorem śmieci - i możesz uruchomić w nim dowolny kod.

Jeśli szukasz rozwiązania systemowego (lub nie masz dostępu do klas, które chcesz monitorować), nie znam żadnej opcji JVM, która to umożliwia. Możesz jednak można załadować i wyładować klasy dziennika (GCed), ale nie o to pytasz.

-2

Jest ładny wbudowane narzędzie do obserwacji w JDK JVM w czasie wykonywania. To jest jvisualvm. Jest to dobry odniesienia z screenshoty: http://visualvm.java.net/description.html

Oto jeden z nich: enter image description here

nadzieję, że pomoże.

+1

jprofiler to bardzo potężne i często używane narzędzie, ale jest darmowe tylko dla opensource, a standardowa licencja dla pojedynczej instancji kosztuje prawdziwe pieniądze - 500 USD. Może to być problem w przypadku niektórych projektów. – BrownFurSeal

+1

Znam i używam VisualVM, ale nie obsługuje wyświetlania śmieci zebranych obiektów. –

+0

Jest to przydatne narzędzie, ale nie odpowiada na tę szczególną potrzebę. –

Powiązane problemy