Réponses:
Sampling
signifie prendre beaucoup de thread dumps et analyser les traces de pile. Ceci est généralement plus rapide, ne nécessite pas de modifications d'exécution dans votre bytecode (ce qui peut le casser), mais est également moins précis.
Profiling
signifie instrumenter vos classes et méthodes, afin qu'elles «signalent» chaque fois qu'elles sont exécutées. C'est plus précis, car il compte chaque appel de méthode instrumentée, pas seulement ceux capturés lorsque le vidage est effectué. Cependant, l'instrumentation signifie que le bytecode de vos classes est modifié, ce qui peut interrompre votre programme. En fait, pour cette raison, l'utilisation du profilage sur de grands serveurs d'applications (comme JBoss ou WebLogic) entraîne souvent la mort ou le blocage de tout.