Search Results for '가비지 컬렉션'

1 POSTS

  1. 2009.10.29 가비지 컬렉션.

가비지 컬렉션.

Posted 2009.10.29 02:46
가비지 컬렉션의 대상.

액션스크립트 프로그램에서 객체는 더 이상 접근이 불가능하게 된 순간부터 가비지 컬렉션의 대상이 된다.

자주 사용되는 가비지 컬렉션 루트

* 패키지 레벨 변수
* 현재 실행 중인 메서드 또는 함수 내의 지역 변수
* static 변수
* 프로그램 메인 클래스 인스턴스의 인스턴스 변수
* 플래시 런타임 디스플레이 리스트 상에 있는 객체의 인스턴스 변수
* 현재 실행 중인 함수나 메서드의 스코프 체인 내의 변수

액션스크립트에서는 접근 불가능한 객체들을 메모리에서 바로 제가하지 않고
주기적으로 접근 불가능한 객체들을 확인하고 이를 제거한다. 이를 가비지 컬렉션 주기라 함.

마크앤 스윕( mark and sweep ) : 플래시 런타임이 실행되면, 플래시 런타임은 먼저 운영체제에 현재 구동중인 프로그램의 객체들을 저장하기 위한 일정량의 메모리를 할당해 달라고 요청한다. 프로그램이 실행되면, 메모리에 객체들이 쌓인다. 이때 특정 시점에에서 프로그램의 객체 중 일부는 접근이 가능한 상태가 되고, 일부는 접근 불가능한 상태가된다. 프로그램에서 많은 객체가 생성된 후에는, 액션스크립트가 가비지컬렉션 주기를 한번 돌기로 결정한다. 이때 접근 가능한 모든 객체들은 그래도 보존 되도록 마크되고, 접근이 불가능한 모든 객체들은 메모리에서 스위핑( 제거 ) 된다.

현재 플래시 런타임에 할당된 메모리의 양에 근접 했을 때 트리거된다. 하지만 액션스크립트에서는 언제 가비지 컬렉션의 주기가 수행되는지에 대해선 명확한 보증을 하지 않고, 강제적으로 가비지 컬렉션을 수행하는 방법도 없다..

내부적 객체 처리 )

객체에 대한 모든 참조를 제거하려면, 배열에서 이를 제거해야 하고 이를 참조하는 모든 변수들을 null로 설정해야한다. 경우에 따라서는 개체를 생성하고 이를 메모리에서 제거하는 것이 객체를 재사용하는 것보다 효과적이지 못한 경우가 있다.
( 가능하면 객체를 제거하기보다 재사용하는 방식을 택하도록 노력하는 것이 좋다. )

불필요한 코드가 샐행되는 것을 막으려면.. 객체를 비활성화 시켜야한다.

* 이벤트와 관련된 객체의 메서드를 등록 해지한다.
* 모든 타이머와 인터벌을 중단한다.
* 타임라인의 플레이 헤드를 중단한다.
* 이 객체가 접근 불가능한 상태가 될 때 아울러 접근이 불가능해지는 모든 객체를 비활성화시킨다.