您添加到体验中的每个建筑和脚本组件都会消耗内存。当内存使用达到引擎限制时,用户的设备或服务器可能会崩溃,因此您需要主动监控使用情况。
开发者控制台提供了两个监控内存使用情况的工具:
内存 — 按使用类别查看实时内存消耗,包括您的自定义组件和引擎内部进程。
Luau 堆 — 创建堆内存的快照,堆内存是指您的脚本的内存分配。此工具提供多种视图,以帮助您从不同角度识别当前的内存分配和问题,如对象类型和引擎类。它还允许您创建多个快照,以比较随着时间推移的内存使用差异。
您可以通过以下任一方式在测试或在线游戏会话中打开控制台:
- 按 F9。
- 在聊天中输入 /console。
- 使用游戏菜单:
打开游戏中的 Roblox 菜单。

选择 设置 标签。
向下滚动到 开发者控制台 并点击 打开。
内存
内存工具分类并显示实时内存使用情况。它以 MB 为单位显示每个类别的内存使用情况,并生成使用变化的图表。
要查看内存分配:
打开开发者控制台。
展开工具下拉菜单以选择内存。

展开客户端-服务器下拉菜单以选择客户端或服务器。
浏览内存使用类别和项目。如果您想查看使用情况随时间的变化,请展开类别以显示图表。
核心内存 — 引擎核心构建过程的内存使用,包括网络、头像和您无法直接控制的 GUI 元素。
场所内存 — 基于您如何构建体验的内存使用,包括模型、地形、部件、脚本和您添加到体验中的所有其他自定义元素。
场所内存参考类别 描述 HttpCache 从 Roblox 服务器加载并现在缓存到内存中的资源(图像、网格等)。 实例 Instances 在场所中的实例。 信号 在实例之间触发的信号(在一个实例上触发事件以触发另一个实例上的事件)。 LuaHeap 用于核心脚本(与 Roblox 客户端捆绑的脚本)和自定义脚本的堆内存。 脚本 Luau 脚本。 物理碰撞 物理仿真的碰撞数据。 物理部件 物理几何和动力学。 图形实体模型 渲染实体模型的图形数据。 图形网格部件 MeshPart 对象的图形。 图形粒子 粒子系统的图形。 图形部件 部件的图形。 图形空间哈希 一般渲染。 图形地形 地形的图形。 图形纹理 纹理内存。 图形纹理角色 角色的纹理内存。 声音 内存中的声音。 流媒体声音 流媒体声音。 地形体素 地形体素。 地形物理 地形物理。 Gui 通用 GUI 元素使用的内存。 动画 用于动画数据的内存,例如姿势和 KeyframeSequence 缓存数据以供角色动画使用。 导航 PathfindingService 支持结构使用的内存。 未跟踪内存 — 系统无法轻松归因于特定来源的内存分配。
场所脚本内存 — 您的脚本的内存使用情况,提供有关单个脚本和自定义内存标签如何影响整体内存使用的洞察。
核心脚本内存 — 内部引擎脚本的内存使用,您无法直接控制。
在这些类别中,场所内存和场所脚本内存是性能优化中最重要的,因为它们帮助您了解构建和脚本选择如何影响内存消耗以及潜在的优化领域。有关场所脚本内存的更多信息,请使用 Luau 堆 工具创建快照并按不同指标分析内存分配。
Luau 堆
Luau 堆工具允许您创建当前堆内存分配的快照,堆内存是指 Luau 脚本用于存储变量、表、函数和其他运行时数据结构的内存。此工具提供多种视图,以帮助您从不同角度识别问题,如对象类型和引擎类。它还允许您创建多个快照,以比较随着时间推移的内存使用差异。
创建快照
要创建内存分配的快照:
打开开发者控制台。
展开工具下拉菜单以选择LuauHeap。

展开客户端-服务器下拉菜单以选择客户端或服务器。
点击创建快照按钮。
分析内存使用
该工具提供了多种视图以查看 Luau 内存使用情况:
- 图形 — 显示聚合的内存使用树,每个节点代表一个分配了内存的对象。
- 对象标签 — 按运行时类型显示内存大小和计数,如 function、table 和 thread。
- 内存类别 — 按引擎分配的内存类别显示内存大小和计数。引擎在分配时为对象分配内存类别。
- 对象类 — 按您的脚本使用和存储其实例的引擎类显示内存大小和计数,如 EnumItem、Animation、CFrame。重要的是,此视图不展示引擎内部的内存使用,只有 Luau 虚拟机的内存使用。
- 唯一引用 和 未分配实例 — 显示没有在数据模型中具有父级的实例的计数和总数,这些实例只能通过脚本访问。还显示所有路径,锁定实例对象。
图形
图形视图是所有 Luau 堆视图中最详细和复杂的视图。它显示聚合的内存使用树,每个节点代表一个分配了内存的对象。树状图显示对象之间的连接,并推导对象引用之间的最短路径。它具有以下内存大小列:
- 大小 — 自身的内存使用量加上数据结构中内容的内存使用量。
- 自身 — 数据结构本身直接分配的内存,不包括它包含的任何内容的内存使用量。

树图的根是 registry,它存储所有引擎和 Luau 引用,如与信号或任务库连接的函数、模块脚本返回的表以及全局函数、表和类。它通常是以下常见条目的父级:
- Module @Path.To.Module 是模块脚本返回的表。
- name:123 =Path.To.Module 是指定脚本中的一个函数。匿名函数没有名称。顶级节点通常指代全局脚本函数。例如::1= Workspace.[Username].Animate。
- upvalue 是捕获函数的引用。有关更多信息,请参见 捕获局部作用域。
- env 指的是一个函数的环境。在大多数情况下,它是表示脚本全局范围的表。
- globals 指的是线程的环境。
- [key] 表示作为表键的对象。
- array 表示一个数组。
- stack 指的是存储所有函数局部的数组。
- constants 表示函数使用的所有常量值。
内存类别
内存类别视图按内存大小和计数显示内存类别,这些类别在分配时由引擎分配给对象。默认情况下,内存类别的名称与脚本相同,或者您可以使用 debug.setmemorycategory 函数分配自定义内存类别名称。
唯一引用和未分配实例
唯一引用和未分配实例视图是相关的。两者均显示没有在数据模型中具有父级的实例的内存使用情况,这些实例只能通过脚本访问,并显示所有路径,该路径锁定实例对象。如果一个实例仅在 Luau 脚本中被引用,则它出现在唯一引用中。否则,它也在 Roblox 系统中被使用,并出现在未分配实例中。这两种视图显示两个指标:
- 计数 — 从同一路径访问的具有相同名称的实例数,例如在同一个表中多个名为 Dragon 的实例。
- 总实例数 — 这些根内部的对象总数,例如构造一个 Dragon 实例的所有部件、脚本和音效对象。

这些视图对于识别不必要的连接实例非常有用,当您不再需要它们时,您需要断开连接。如果您在此视图中看到许多意外的实例,请检查持有它们的路径,并评估它们是否必要。