2010-02-25 13 views
6

Proszę, daj mi znać, jaki jest najlepszy sposób określenia składu pamięci młodej generacji promowanej do starego pokolenia po każdej młodej imprezie GC?Java GC: najlepsze klasy obiektów promowane (według rozmiaru)?

Idealnie chciałabym znać nazwy klas, które są odpowiedzialne za 80% kupy w każdym kawałku "młodego gen -> starego genu";

Przykład: Mam młody gen 600M, każda kadencja promuje 6M; Chcę wiedzieć, które obiekty tworzą 6M.

Dziękuję.

Odpowiedz

6

Nie ma prostego sposobu, aby to zrobić, jednak ostatnio analizowałem wydajność pamięci dużych aplikacji java i mogę podzielić się doświadczeniem.

Oto jak znalazłam jakie obiekty są promowane do starej gen:

Najpierw trzeba określić, jakie obiekty znajdują się w „starym”/zwyczajnych przestrzeni. Jest to w zasadzie standardowa analiza sterty java. Do tego polecam jmap. Jest częścią słońca jvm. Uruchom: jmap -dump:file=heap.hprof PID , aby uzyskać zrzut sterty. Będzie to wstrzymać JVM podczas zrzutu (~ do 30 sekund na kupie 2GB)

Teraz załadować plik .prof w Memory analyser (najlepszym narzędziem do tego, ręce w dół) chciałbym spędzić dzień gra z pamięci analizatora aby to zrozumieć, obejrzyj screencam (wymaga zalogowania, ale warto).

Teraz dowiesz się, jakie przedmioty znajdują się w twoim stercie.

Oto podstęp: na ekranie przeglądu analizatora pamięci znajduje się link do: "Histogram obiektów nieosiągalnych". Teraz te obiekty mają zostać zebrane podczas następnego GC. Ale niektórzy są prawdopodobnie w Eden, niektórzy w ocalałych i niektórzy w starszym wieku.

Teraz wybierz profilera z funkcją profilowania pamięci, wolę TwójKit. Uruchamianie aplikacji przy użyciu pakietu i rejestrowanie przydzielania obiektów.

Uruchom i zarejestruj tworzenie obiektu. Po utworzeniu listy obiektów użyj wszystkich trzech list, aby uzyskać obraz tego, co się dzieje. Rób to, co ludzie robią najlepiej, patrz wzorce.

  • Jakie obiekty są tworzone i są osiągalne. (Analizator Memory)
  • Przedmioty nieosiągalny w stercie (analizatora Memory)
  • Obiekty utworzone podczas biegu (Profiler)

Innym sposobem podejścia jest YourKit generations view. Możesz zrobić migawki sterty i porównać, które obiekty są wciąż żywe między migawkami. Jeśli użyjesz tego z visualgc, możesz określić, jak długo obiekt musi być żywy, aby awansować na stary gen, i robić migawki w tych odstępach czasowych, aby zobaczyć, które obiekty jeszcze żyją.

Cóż, powodzenia. /JT

Powiązane problemy