使用此函数,您可以检索有关垃圾收集器当前状态的信息。该函数将返回一个struct,它将包含以下成员变量(请注意,这里的 "对象" 是指任何可以被垃圾回收的东西,不是资源浏览器中定义的通用对象实例):
GC 统计结构 | ||
---|---|---|
变量 | 类型 | 描述 |
objects_touched | Real | 这是垃圾回收器在前一帧中找到的活动对象的数量。这将根据收集的世代而有所不同。 |
objects_collected | Real | 垃圾回收器确定在前一帧中未处于活动状态的对象数量,因此可以将其删除。 |
traversal_time | Real | 这是垃圾收集器找出哪些对象处于活动状态所花费的时间(在主线程上)。 |
collection_time | Real | 这是垃圾收集器清理被视为不活跃的对象所花费的时间(以微秒为单位)(在单独的线程上)。 |
gc_frame | Real | 这是一个计数器,每次发生垃圾收集传递时都会递增。如果禁用垃圾收集,则不会增加。 |
generation_collected | Real | 这是上次收集的那一代的索引。0 是最年轻的一代,3 是目前最古老的一代。 |
num_generations | Real | 这是垃圾收集的总次数。 |
num_objects_in_generation | Array of Reals | 这是一个数组(大小为num_generations),包含每代对象的数量。 |
注意:在 HTML5 目标平台上,垃圾回收由 JavaScript 引擎处理,因此,如果在该平台上使用此函数,则上述结构中的成员变量都将返回 0。
使用此函数时,请注意,显示的对象信息仅在完整生成处理完毕后才会更新,这可能需要几帧时间,具体取决于帧时间设置(有关帧时序的更多信息,请参阅here)。
gc_get_stats();
if (global.debug == true)
{
var _s = gc_get_stats();
var _t = _s.traversal_time;
var _c = _s.collection_time;
show_debug_message("Traversal time = " + string(_t))
show_debug_message("Collection time = " + string(_c))
}
上面的代码检查一个全局变量,如果它是true,它将从 garabge 收集器获取信息并将其作为调试消息输出到控制台。