VisualVM verfügt über zwei separate Registerkarten für Sampling und Profiling. Was ist der Unterschied zwischen Sampling und Profiling in VisualVM?
Sampling
bedeutet, dass viele Thread-Dumps erstellt und Stack-Traces analysiert werden. Dies ist in der Regel schneller, erfordert keine Laufzeitänderungen in Ihrem Bytecode (was zu Fehlern führen kann), ist aber auch weniger genau.
Profiling
bedeutet instrumentieren Ihre Klassen und Methoden, so dass sie "berichten", wann immer sie ausgeführt werden. Dies ist genauer, da jeder Aufruf der instrumentierten Methode gezählt wird, nicht nur die, die beim Erstellen des Speicherauszugs abgefangen wurden. Die Instrumentierung bedeutet jedoch, dass der Bytecode Ihrer Klassen geändert wird. Dies kann Ihr Programm beschädigen. Aus diesem Grund führt die Profilerstellung auf großen Anwendungsservern (wie JBoss oder WebLogic) häufig dazu, dass alles abstürzt oder hängen bleibt.