Ответы:
Sampling
означает брать много дампов потока и анализировать следы стека. Это обычно быстрее, не требует изменений времени исполнения в вашем байт-коде (которые могут его сломать), но также менее точно.
Profiling
означает инструментарий ваших классов и методов, чтобы они «отчитывались» при каждом запуске. Это более точно, так как он учитывает каждый вызов инструментированного метода, а не только тех, которые были обнаружены при завершении дампа. Однако инструментарий означает, что байт-код ваших классов изменяется, и это может нарушить вашу программу. Фактически, по этой причине использование профилирования на больших серверах приложений (таких как JBoss или WebLogic) часто приводит к тому, что все умирает или зависает.