Różnica między próbkowaniem a profilowaniem w jVisualVM

158

VisualVM ma dwie oddzielne karty do próbkowania i profilowania. Jaka jest różnica między próbkowaniem a profilowaniem w VisualVM?

Parag
źródło

Odpowiedzi:

182

Samplingoznacza pobieranie wielu zrzutów wątków i analizowanie śladów stosu. Zwykle jest to szybsze, nie wymaga zmian w kodzie bajtowym w czasie wykonywania (co może go zepsuć), ale jest również mniej dokładne.

Profilingoznacza oprzyrządowanie klas i metod, więc „raportują” za każdym razem, gdy są uruchomione. Jest to dokładniejsze, ponieważ liczy każde wywołanie metody instrumentalnej, a nie tylko te, które zostaną wykryte po wykonaniu zrzutu. Jednak instrumentacja oznacza, że ​​kod bajtowy twoich klas został zmieniony, co może spowodować uszkodzenie programu. Właściwie z tego powodu używanie profilowania na dużych serwerach aplikacji (takich jak JBoss czy WebLogic) często powoduje, że wszystko umiera lub zawiesza się.

npe
źródło
2
Czy oznaczałoby to, że profilowanie jest dokładniejsze niż pobieranie próbek, ale wymagałoby więcej zasobów?
Parag
10
Odkryłem, że próbkowanie jest bardziej niż wystarczająco dokładne za każdym razem, gdy używam go do określenia złych metod działania. Osobiście nigdy nie korzystam z profilowania.
Marquez