Flash AS3-内存管理
我有一个关于AS3内存管理的问题,不知是否有人能帮我 假设我为一个类创建了一个实例变量,在本例中为Sound或type:Flash AS3-内存管理,flash,actionscript-3,Flash,Actionscript 3,我有一个关于AS3内存管理的问题,不知是否有人能帮我 假设我为一个类创建了一个实例变量,在本例中为Sound或type: public class SoundStore extends Sprite{ var s:Sound; 然后在各种类函数中,我多次引用该变量,每次我都想加载一个新声音: s = new Sound(); 我是否正确地认为,每次我创造一个新的声音,我会覆盖以前分配的内存 谢谢。AS3是一种垃圾收集语言,它使用引用计数来处理未使用的对象 s变量在内部是指向包含声音对象的内
public class SoundStore extends Sprite{
var s:Sound;
然后在各种类函数中,我多次引用该变量,每次我都想加载一个新声音:
s = new Sound();
我是否正确地认为,每次我创造一个新的声音,我会覆盖以前分配的内存
谢谢。AS3是一种垃圾收集语言,它使用引用计数来处理未使用的对象
s
变量在内部是指向包含声音
对象的内存块的指针。每次执行s=new Sound()
AS3将在内存中创建一个新的Sound
对象,并将s
指针设置为该对象的地址。旧对象仍然存在于内存中。如果您没有对旧对象的引用,垃圾回收器将在某个点(通常是下一轮收集)处理该对象。这意味着在任何时候,内存中都可能有多个声音对象,这些对象没有被引用,但仍在使用资源。垃圾收集器被设计成周期性地遍历所有分配的对象,并在没有对它们的引用时处理它们
这里有一篇关于Flash/AS3中GC的好文章:否。AS3是一种垃圾收集语言,它使用引用计数来处理未使用的对象
s
变量在内部是指向包含声音
对象的内存块的指针。每次执行s=new Sound()
AS3将在内存中创建一个新的Sound
对象,并将s
指针设置为该对象的地址。旧对象仍然存在于内存中。如果您没有对旧对象的引用,垃圾回收器将在某个点(通常是下一轮收集)处理该对象。这意味着在任何时候,内存中都可能有多个声音对象,这些对象没有被引用,但仍在使用资源。垃圾收集器被设计成周期性地遍历所有分配的对象,并在没有对它们的引用时处理它们
在Flash/AS3中有一篇关于GC的好文章:好的,谢谢。我知道我不能控制GC何时运行。如果我这样做,这将有助于我的内存管理:try{s=null;}catch(e:Error){}s=new Sound();No.s将停止指向该声音实例,但它仍将位于内存中,直到整个应用程序中没有任何其他内容指向它为止。(这包括事件,除非usewakrefereces
设置为true)。您可以调用System.gc()
在Flash 10及更高版本中强制执行垃圾收集,但这是一个非常糟糕的主意。它完全破坏了性能,甚至不能保证在调试之外做任何事情。那么,如果我希望加载多个MP3文件,一次加载一个,再一次只播放一个,那么设置代码的内存效率最高的方法是什么呢。在我创建一个新声音并将其分配给s之前,确保当前的s没有指向它的引用吗?只需将它的所有引用设置为null并正常进行。垃圾收集器将频繁地进行循环,以使其不会成为问题。你唯一需要担心的是确保所有引用都被清除。好的,谢谢。我知道我不能控制GC何时运行。如果我这样做,这将有助于我的内存管理:try{s=null;}catch(e:Error){}s=new Sound();No.s将停止指向该声音实例,但它仍将位于内存中,直到整个应用程序中没有任何其他内容指向它为止。(这包括事件,除非usewakrefereces
设置为true)。您可以调用System.gc()
在Flash 10及更高版本中强制执行垃圾收集,但这是一个非常糟糕的主意。它完全破坏了性能,甚至不能保证在调试之外做任何事情。那么,如果我希望加载多个MP3文件,一次加载一个,再一次只播放一个,那么设置代码的内存效率最高的方法是什么呢。在我创建一个新声音并将其分配给s之前,确保当前的s没有指向它的引用吗?只需将它的所有引用设置为null并正常进行。垃圾收集器将频繁地进行循环,以使其不会成为问题。你唯一需要担心的是确保所有对它的引用都被清除。