2011-11-07 4 views
0

AS3 메모리 관리에 관한 질문이 있습니다. 누구든지 나를 도울 수 있는지 궁금합니다. 나는이 경우 또는 형식 사운드의 클래스에 대한 인스턴스 변수 생성 치죠AS3 - 메모리 관리

:이 변수를 여러 번 참조 다양한 클래스 함수 내에서 다음

public class SoundStore extends Sprite{ 

var s:Sound; 

을, 나는 새로운 사운드를로드하고 싶어 할 때마다 :

s = new Sound(); 

나는 새로운 사운드를 만들 때마다 이전에 할당 된 메모리를 덮어 쓰겠다고 생각하는 것이 맞습니까?

감사

답변

5

번호 AS3 미사용 객체를 처리하는 기준 계수를 사용하여 가비지 수집 언어이다.

s 변수는 내부적으로 Sound 개체를 포함하는 메모리 블록에 대한 포인터입니다. 때마다 s = new Sound() AS3은 메모리에 새로운 Sound 개체를 만들고 해당 개체의 주소에 s 포인터를 설정합니다. 오래된 개체는 여전히 메모리에 있습니다. 이전 객체에 대한 참조가없는 경우 가비지 수집기는 객체를 다음 시점에서 처리합니다. 즉, 메모리에 참조되어 있지 않지만 리소스를 계속 사용하고있는 Sound 개체가 여러 개있을 수 있습니다. 가비지 컬렉터는 할당 된 모든 객체를 주기적으로 트롤링하고 참조가 없다면 폐기합니다. http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

+0

확인 감사 :

여기에 플래시/AS3에서 GC에 좋은 기사입니다. GC 실행시기에 대한 구체적인 제어가 없다는 것을 이해합니다. 다음과 같이하면 내 메모리 관리에 도움이됩니다. { s = null; } catch (e : 오류) {} = 새 소리(); – crooksy88

+2

번호는 Sound의 해당 인스턴스를 가리 키지 않지만 전체 응용 프로그램 내의 다른 부분이 가리킬 때까지 메모리에 계속있게됩니다. (이것은'useWeakRefereces'가 true로 설정되지 않은 한 이벤트를 포함합니다). – WORMSS

+0

Flash * 10 이상에서 가비지 콜렉션을 강제 실행하려면 System.gc()를 호출 할 수 있지만 실제로는 ** 나쁜 생각입니다. 그것은 성능을 완전히 망쳐 버리고 디버그 밖에서는 아무 것도하지 않을 것입니다. – Polynomial