# Introduction to profiling

> **TL;DR**
> Profiler home page: `View | Tool Windows | Profiler`

Profiling is a type of runtime analysis that operates on large amounts of runtime data and gives you a bird's-eye view of what is happening inside a process. The collected data relates to various aspects of program operation, such as CPU usage, memory allocation, and threads' activity.

Profiling can be instantaneous, like capturing a memory snapshot, or long-running. For example, the CPU profiler can collect data during arbitrarily large periods of time, like hours or even days of program operation.

> **Tip:**
> If you are new to profiling and want to start right away, check out the [available tutorials](#available-tools).

## When is profiling helpful?

Profiling tools help you:

* Identify bugs, bottlenecks and diagnose poor performance

* Identify hot spots and opportunities for optimization, not necessarily related to a performance problem

* Assess or compare the performance of different solutions

* Get a better understanding of how a program operates under the hood

## Supported profiling types

IntelliJ Profiler is not a single tool but rather a suite of related tools. They all have their own area of application:

* [CPU and memory live charts](cpu-and-memory-live-charts.html) – allow you to monitor a process in real time. This type of diagnostics gives you the resource consumption metrics over time and may be useful as a monitoring tool or, in the case of a performance problem, a starting point for further investigation. > **Note:** > For a hands-on example, refer to [this tutorial](https://blog.jetbrains.com/idea/2021/05/get-started-with-profiling-in-intellij-idea/).

* [CPU and allocation profiling](cpu-and-allocation-profiling-basic-concepts.html) – allow you to see how CPU and memory resources were utilized during a particular period of time. This may be useful for detecting hot code, opportunities for optimization, or just discovering how a program operates at runtime. > **Note:** > For a hands-on example, refer to [this tutorial](https://blog.jetbrains.com/idea/2022/01/fixing-the-parrot-party/).

* [Memory snapshots](create-a-memory-snapshot.html) – allow you to analyze how memory is used at a particular instant. This data is useful for investigating memory-related issues.

* [Thread dumps](thread-dumps.html) - allow you to see the program state at a particular instant. The produced data captures the state of all threads. This may be useful, for example, to examine an unresponsive application.

## See also

### JetBrains Blog Posts

[https://blog.jetbrains.com/go/2026/05/20/golang-profiling-guide/](https://blog.jetbrains.com/go/2026/05/20/golang-profiling-guide/)

