1. Expand the client-server dropdown to select **Client** or **Server**.
1. Browse the memory usage categories and items. If you want to see usage over time, expand the category to display a chart.
- **CoreMemory** — Memory usage by the core building processes of the engine, including networking, avatars, and GUI elements that you don't have direct control over.
- **PlaceMemory** — Memory usage based on how you build your experience, including models, terrain, parts, scripts, and all other custom elements that you add to your experience.
| Category | Description |
|---|---|
| **HttpCache** | Assets (images, meshes, etc.) loaded from Roblox servers and now held in a cache in memory. |
| **Instances** | `Class.Instance|Instances` in the place. |
| **Signals** | Signals that fire between instances (an event firing on one instance to trigger an event on another instance). |
| **LuaHeap** | Heap memory for both core scripts (scripts that ship with the Roblox client) and custom scripts. |
| **Script** | Luau scripts. |
| **PhysicsCollision** | Collision data for physics simulations. |
| **PhysicsParts** | Physics geometry and kinetics. |
| **GraphicsSolidModels** | Graphics data to render solid models. |
| **GraphicsMeshParts** | Graphics for `Class.MeshPart` objects. |
| **GraphicsParticles** | Graphics for particle systems. |
| **GraphicsParts** | Graphics for parts. |
| **GraphicsSpatialHash** | General rendering. |
| **GraphicsTerrain** | Graphics for terrain. |
| **GraphicsTexture** | Texture memory. |
| **GraphicsTextureCharacter** | Texture memory for characters. |
| **Sounds** | In-memory sounds. |
| **StreamingSounds** | Streaming sounds. |
| **TerrainVoxels** | Terrain voxels. |
| **TerrainPhysics** | Terrain physics. |
| **Gui** | Memory used by common GUI elements. |
| **Animation** | Memory used for animation data, such as poses and `Class.KeyframeSequence` cached data for avatar animations. |
| **Navigation** | Memory used by supporting structures for `Class.PathfindingService`. |
1. Expand the client-server dropdown to select **Client** or **Server**.
1. Click the **Create Snapshot** button.
### Analyze memory usage
The tool provides many views into Luau memory usage:
- **Graph** — Shows an aggregated memory usage tree, with each node representing an object with memory allocated.
- **Object Tags** — Shows memory sizes and counts by runtime types, such as `function`, `table`, and `thread`.
- **Memory Categories** — Shows memory sizes and counts by engine-assigned memory categories. The engine assigns a memory category to an object at allocation time.
- **Object Classes** — Shows memory sizes and counts by engine classes that your scripts use and store their instances, such as `EnumItem`, `Animation`, `CFrame`. Critically, this view does not show memory usage within the engine itself, only the Luau VM.
- **Unique References** and **Unparented Instances** — Shows counts and total numbers of instances for **unique references** or **all remaining references** that don't have a parent in the data model and are only reachable by scripts. Also shows all paths that pin the instance object.
#### Graph
The **Graph** view is the most detailed and complex view among all Luau heap views. It shows an aggregated memory usage tree with each node representing an object with memory allocated. The tree shows how objects connect to each other and derives the shortest path between object references. It has the following columns of memory size:
- Size — The self memory usage plus the memory usage by contents within the data structure.
- Self — The memory directly allocated for the data structure itself, excluding the memory usage by any content it contains.
The root of the tree graph is `registry`, which stores all engine and Luau references, such as functions connected to signals or the task library, tables returned by module scripts, and global functions, tables and classes. It usually parents the following common entries:
- `Module @Path.To.Module` is the table returned by a module script.
- `name:123 =Path.To.Module` is a function inside a specified script. Anonymous functions don't have names. The top level node often refers to the global script function. Example: `:1= Workspace.[Username].Animate`.
- `upvalue` is a reference for captured functions. See [Capture local scope](../../luau/scope.md#capture) for more information.
- `env` refers to the environment of a function. For most cases, it's a table representing the global scope of a script.
- `globals` refers to the environment of a thread.
- `[key]` represents objects that serve as table keys.
- `array` represents an array.
- `stack` refers to the array that stores all function locals.
- `constants` represents all constant values that functions use.
#### Memory categories
The **Memory Categories** view shows memory sizes and counts by memory categories, which the engine assigns to objects at allocation time. By default, the memory category has the same name as the script, or you can assign custom memory category names using the `debug.setmemorycategory` function.
#### Unique references and unparented instances
The **Unique References** and **Unparented Instances** views are related. Both show memory usage of instances that don't have a parent in the data model and are only reachable by scripts, along with all paths that pin the instance object. If an instance is only referenced within Luau scripts, it appears under **Unique References**. Otherwise, it's also in use by Roblox systems and appears under **Unparented Instances**. Both views show two metrics:
- **Count** — The number of instances with the same name that are reachable from the same path, such as multiple instances named `Dragon` in the same table.
- **Total Instances** — The total number of objects inside those roots, such as all parts, scripts, and sound objects that construct a `Dragon` instance.
These views are useful for identifying unnecessary connected instances, which you need to disconnect when you no longer need them. If you see many unexpected instances in this view, check out the paths holding them and evaluate whether they are necessary.