By going through the earlier section, hopefully you have convinced yourself that you are going to need to use a profiling tool to improve the performance of your application. Now, let's look into the art behind profiling. In other words, let's see how our applications are profiled. As you have learned, the main purpose of a profiler is to measure resource usage in your application like CPU utilization, memory consumption, I/O utilization, and so on.
In simpler terms, the profiler needs to record methods that are getting invoked and the time they took to complete the processing. To do this, the profiler needs to collect data; this process is called sampling. The data collection, like call stack, occurs at specified intervals. This is a more passive technique where we are not meddling with the application code. Hence, this approach has less impact...