Différence entre l’échantillonnage et le profilage dans jVisualvm

VisualVM dispose de deux tabs distincts pour l’échantillonnage et le profilage. Quelqu’un peut-il m’aider à comprendre la différence entre l’échantillonnage et le profilage dans VisualVM?

Sampling signifie prendre beaucoup de vidages de fil et parsingr les traces de stack. Cela est généralement plus rapide, ne nécessite pas de modifications à l’exécution de votre bytecode (ce qui peut le casser), mais est également moins précis.

Profiling signifie instrumenter vos classes et méthodes, afin qu’elles “rapportent” chaque fois qu’elles sont exécutées. Ceci est plus précis, car il compte chaque invocation de méthode instrumentée, pas seulement celles capturées lors du vidage. Cependant, l’instrumentation signifie que le bytecode de vos classes est modifié et que cela peut casser votre programme. En fait, pour cette raison, l’utilisation du profilage sur des serveurs d’applications volumineux (comme JBoss ou WebLogic) provoque souvent la mort ou le blocage.