Profilers are performance analysis tools that may be used to monitor the performance of a program or application when running. A profiler may assist a developer by collecting many different runtime statistics and other information about the application. Profilers may use a wide variety of techniques for collect data, including hardware interrupts, code instrumentation or modification, operating system interfaces, and performance counters.
Code instrumentation is a mechanism by which a profiler may make modifications to the application code to, among other things, send data to the profiler. In some embodiments, a virtual machine or other managed environment may be used to compile an application or portion of an application at the time the application is run. Such a compilation may be known as just in time compiling.
Different profilers may have different capabilities. Some profilers may monitor many statistics or variables and produce a heavy computational burden on a system. Other profilers may monitor a few data points and have a lighter burden on the system, which may affect application performance.