Risposte:
Sampling
significa prendere molti dump di thread e analizzare le tracce dello stack. Questo di solito è più veloce, non richiede modifiche di runtime nel tuo bytecode (che potrebbe romperlo), ma è anche meno preciso.
Profiling
significa strumentare le tue classi e i tuoi metodi, in modo che "riportino" ogni volta che vengono eseguiti. Questo è più accurato, poiché conta ogni invocazione del metodo strumentato, non solo quelli catturati al termine della discarica. Comunque la strumentazione significa che il bytecode delle tue classi è cambiato, e questo potrebbe interrompere il tuo programma. In realtà, per questo motivo, l'utilizzo della profilazione su server di applicazioni di grandi dimensioni (come JBoss o WebLogic) spesso fa sì che tutto muoia o si blocchi.