In the Android platform you've got Traceview, a profiling tool featuring this "Timeline Panel" view where you can easily see the time spent by each method in a historical and structured way. One nested call shows under another, you can zoom in to detail the nesting and see method names.
I'm not an expert in profiling but to me this is an easy way to find bottlenecks in specific use cases or high level routines.
How can I have an equivalent view using a JVM tool like VisualVM?
VisualVM has that "hotspot" table showing method names sorted by "self time" or "total time" which end up highlighting low level methods from the language's core that are called from everywhere, with no nesting or historical relation to anything. I can't figure out how to use it efficiently.