Search Results for 'as3'

2 POSTS

  1. 2009.10.29 가비지 컬렉션.
  2. 2009.08.18 액션스크립트 명령문

가비지 컬렉션.

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

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

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

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

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

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

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

내부적 객체 처리 )

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

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

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







액션스크립트 명령문

Posted 2009.08.18 02:18
               
 명령문  사용 예 설명
 break  break 순환문이나 switch 문을 빠져나온다.
 case  case exoression : 하위 명령문
 switch문에서 조건적으로 실행할 명령문을 식별한다.
 continue  continue;  현재 순환문에서 나머지 명령문들을 건너뛰고 다음번 순환문을 처음부터 시작한다.
 default  defalut : 하위 명령문
 조건식에 부합하는 case 절이 없는 경우 switch 문에서 실행할 명령을 식별한다.
 do while  do{
     하위명령문
} whilte ( expression )
 순환문이 최소한 한 번은 실행되게 한 while문의 변형문
 for  for( init ; test ; update ) {
   명령문
}
 명령문 블록을 반속 실행한다. while문과 의미가 같지만 순환문 초기화와 명령문의 업데이트가순환문의 최상위 부분에 조건식과 함께 나온다.
 for in  for( variable in Object ){
    명령문
}
 객체의 dynamic 인스턴스 변수 값 또는 배열의 요소를 나열한다.
 for each in  for each( variable Or ElementValue in Object ) {
   명령문
}
 객체의 dynamic 인스턴스 변수 값 또는 배열의 요소를 나열한다.
 if

else if

else
 if( expression) {
   하위 명령문
} else if( expression ){
   하위 명령문
} else {
   하위 명령문
}
 하나 또는 여러개의 조건에 따라 하나 이상의 명령문을 실행한다.
 label  label : 명령문
l label : 명령문들
 명령문 식별자와 연계시킨다.
break문과 continue문에서 사용된다.
return
 return;
return expression;
 함수를 빠져나오고 선택적으로 값을 반환한다.
 super  super( arg1 , arg2 , ...argn )
super.method( arg1 , arg2, ... argn )
 상위 클래스의 생성자 메서드 또는 오버라이드된 인스턴스 메서드를 호출한다.
switch
 switch( expression ){
   하위 명령문
}
 하나 또는 여러 개의 조건에 따라 특정 코드를 실행한다.
 throw  throw expression
 런타임 예외를 발생시킨다.
 try / catch / finally  try {
  예외를 발생시킬만한 코드
} catch( error:ErrorType1 ){
  ErrorType1에 대한
  에러 처리 코드
} catch( error:ErrorTypeN ){
  ErrorTypeN에 대한
  에러 처리 코드
} finally {
  항상 실행 되어야 하는 코드
}
 일어날 수 있는 런타임 예외에 반응하도록 코드 블록을 감싼다.
 while  while( expression) {
  하위명령문
}
 명령문 블록을 반복 실행한다.
 with  with( object ){
  하위명령문
}
 명령문 블록을 특정 객체의 스코프에서 실행