我在 Flash 中工作,并尝试使用 Flash Player 中可用的新“域内存”。这实质上可以让您在低级别使用内存,但您必须自己管理内存,就像没有内置垃圾收集器的 C++ 一样。我已经构建了一个基本的分配器/释放器,但我需要一些方法来构建垃圾收集器或引用计数器,以便我可以取消分配未使用的对象。举个例子:
Rect stageRect = new Rect(0, 0, stage.width, stage.height);
// syntax is for understanding only
// actually would allocate memory using my handwritten allocator
我已经构建了一个新的Rect
并存储在一个类成员变量中。现在假设我对这个对象执行一些矩形数学运算,再创建 2 个对象。
Rect quarterRect = stageRect.halfWidth().halfHeight();
如您所见,Rect
返回的 byhalfWidth
是未使用的,可以进行垃圾收集。
由创建的最终矩形halfHeight
存储在 varquarterRect
中,我稍后需要它。
如何检测这些未使用的对象,并相应地处理它们?我一直在阅读Reference Counting、Smart Pointers和 C++的GC,但我仍然不知道如何检测何时未使用引用,以减少引用计数。增加引用计数很容易:当您设置另一个 var 指向该对象时,即:a = stageRect
,应该增加 的引用计数stageRect
,但是您怎么知道什么时候a
未使用?减少引用计数?通常你不会a = null
在现代代码中设置。您只是希望平台能够检测到它未使用的 ref 并处理它。