Diferencia entre muestreo y perfilado en jVisualVM

158

VisualVM tiene dos pestañas separadas para muestreo y creación de perfiles. ¿Cuál es la diferencia entre muestreo y creación de perfiles en VisualVM?

Parag
fuente

Respuestas:

182

Samplingsignifica tomar muchos volcados de subprocesos y analizar los rastros de la pila. Esto suele ser más rápido, no requiere cambios de tiempo de ejecución en su código de bytes (lo que puede romperlo), pero también es menos preciso.

Profilingsignifica instrumentar sus clases y métodos, para que "informen" cada vez que se ejecutan. Esto es más preciso, ya que cuenta cada invocación de método instrumentado, no solo los capturados cuando se realiza el volcado. Sin embargo, la instrumentación significa que se modifica el código de bytes de sus clases, y esto puede romper su programa. En realidad, por esa razón, el uso de perfiles en servidores de aplicaciones grandes (como JBoss o WebLogic) a menudo hace que todo muera o se cuelgue.

npe
fuente
2
¿Significaría que la elaboración de perfiles es más precisa que el muestreo, pero requeriría más recursos?
Parag
10
Descubrí que el muestreo es más que exacto cada vez que lo uso para identificar los métodos de bajo rendimiento. Yo personalmente nunca uso perfiles.
Márquez