内存使用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

您添加到游戏中的每个建筑和脚本组件都会消耗内存。当内存使用达到引擎限制时,用户的设备或服务器可能会崩溃,因此您需要主动监控使用情况。


开发者控制台提供了两个监控内存使用情况的工具:

  • 内存 — 按使用类别查看实时内存消耗,包括您的自定义组件和引擎内部进程。

  • Luau 堆 — 创建堆内存的快照,堆内存是指您的脚本的内存分配。此工具提供多个视图,帮助您从不同的角度识别当前的内存分配和问题,例如对象类型和引擎类。它还允许您创建多个快照,以比较随时间变化的内存使用情况。

您可以通过以下任一方式在测试或在线游戏会话中打开控制台:

  • F9
  • 在聊天中输入 /console
  • 使用游戏菜单:
    1. 打开游戏中的 Roblox 菜单

    2. 选择 设置 标签。

    3. 向下滚动到 开发者控制台 并点击 打开

内存

内存工具对实时内存使用情况进行分类和显示。它以 MB 为单位显示每个类别的内存使用情况,并生成一个关于使用变化的图表。

要查看内存分配:

  1. 打开 开发者控制台

  2. 展开工具下拉菜单以选择 内存

    所有开发者控制台工具的下拉菜单,突出显示了内存选项以供选择。
  3. 展开客户端-服务器下拉菜单以选择 客户端服务器

  4. 浏览内存使用类别和项目。如果您想查看随时间变化的使用情况,请展开类别以显示图表。

    • CoreMemory — 引擎核心构建过程的内存使用,包括网络、头像和您无法直接控制的 GUI 元素。

    • PlaceMemory — 基于您构建游戏的方式的内存使用,包括模型、地形、部件、脚本和您添加到游戏中的所有其他自定义元素。

      类别描述
      HttpCache从 Roblox 服务器加载的资产(图像、网格等),现在保存在内存中的缓存中。
      InstancesInstances 在场所中。
      Signals在实例之间触发的信号(在一个实例上触发事件以在另一个实例上触发事件)。
      LuaHeap核心脚本(与 Roblox 客户端一起发布的脚本)和自定义脚本的堆内存。
      ScriptLuau 脚本。
      PhysicsCollision物理模拟的碰撞数据。
      PhysicsParts物理几何和动力学。
      GraphicsSolidModels用于渲染实心模型的图形数据。
      GraphicsMeshPartsMeshPart 对象的图形。
      GraphicsParticles粒子系统的图形。
      GraphicsParts部件的图形。
      GraphicsSpatialHash一般渲染。
      GraphicsTerrain地形的图形。
      GraphicsTexture纹理内存。
      GraphicsTextureCharacter角色的纹理内存。
      Sounds内存中的声音。
      StreamingSounds流式声音。
      TerrainVoxels地形体素。
      TerrainPhysics地形物理。
      Gui常见 GUI 元素使用的内存。
      Animation用于动画数据的内存,例如姿势和 KeyframeSequence 缓存数据,用于头像动画。
      Navigation支持 PathfindingService 的结构使用的内存。
    • UntrackedMemory — 系统无法轻易归因于特定来源的内存分配。

    • PlaceScriptMemory — 您的脚本的内存使用情况,提供有关单个脚本和自定义内存标签如何影响整体内存使用的见解。

    • CoreScriptMemory — 内部引擎脚本的内存使用情况,您无法直接控制。

    在这些类别中,PlaceMemoryPlaceScriptMemory 是性能优化中最重要的,因为它们帮助您了解构建和脚本选择如何影响内存消耗以及潜在的优化领域。有关 PlaceScriptMemory 的更多见解,请使用 Luau 堆 工具创建快照并按不同指标分析内存分配。

Luau 堆

Luau 堆工具允许您创建当前堆内存分配的快照,堆内存是指 Luau 脚本用于存储变量、表、函数和其他运行时数据结构的内存。此工具提供多个视图,帮助您从不同的角度识别问题,例如对象类型和引擎类。它还允许您创建多个快照,以比较随时间变化的内存使用情况。

创建快照

要创建内存分配的快照:

  1. 打开 开发者控制台

  2. 展开工具下拉菜单以选择 LuauHeap

    所有开发者控制台工具的下拉菜单,突出显示了 LuauHeap 选项以供选择。
  3. 展开客户端-服务器下拉菜单以选择 客户端服务器

  4. 点击 创建快照 按钮。

分析内存使用情况

该工具提供了许多 Luau 内存使用情况的视图:

  • 图形 — 显示一个聚合的内存使用树,每个节点代表一个分配了内存的对象。
  • 对象标签 — 按运行时类型(例如 functiontablethread)显示内存大小和计数。
  • 内存类别 — 按引擎分配的内存类别显示内存大小和计数。引擎在分配时为对象分配内存类别。
  • 对象类 — 按您的脚本使用和存储其实例的引擎类显示内存大小和计数,例如 EnumItemAnimationCFrame。重要的是,此视图不显示引擎内部的内存使用情况,仅显示 Luau VM 的内存使用情况。
  • 唯一引用无父实例 — 显示 唯一引用所有剩余引用 的实例计数和总数,这些实例在数据模型中没有父级,仅通过脚本可达。还显示所有固定实例对象的路径。

图形

图形视图是所有 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 实例的所有部件、脚本和声音对象。
唯一引用视图示例

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

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。