Posts tagged ‘memory’

ApplicationDomain 사용하기

ApplicationDomain이란 클래스, 함수, 상수 등의 정의를 저장해두는 공간입니다. 간단히 기본을 복습해봅시다.

  1. 하나의 AD 안에서 클래스, 함수, 상수의 정의는 고유한 문자열로 구분되는데, 이 문자열은 패키지+클래스(함수) 명입니다.
  2. 하나의 AD에 A라는 클래스 정의가 로딩된 경우 이 AD가 유효한 기간 동안 이 AD내의 클래스로부터 생성된 인스턴스도 유효합니다.
  3. 만약 실행 중인 어플리케이션에서 A라는 클래스로부터 생성된 인스턴스가 하나도 없고 미래에도 생성되지 않는다면 AD안의 클래스 정의도 삭제할 수 있습니다.

하지만 이 정도를 이해했다고 GC를 일으키는 AD구조를 사용할 수 있다고 생각하지는 않습니다. 정말 실전에서 AD의 GC를 바란다면 더욱 깊이 생각해봐야 합니다.
Continue reading ‘ApplicationDomain 사용하기’ »

자동 풀링(auto pooling)을 구현해보자.

CSpvLoader를 구현하다가 간만에 자동풀링을 사용하게 되었습니다. 그런 김에 간단히 자동 풀링의 개념과 사용법을 다뤄볼까 합니다.

이제부터 Bitmap객체에 대한 자동 풀링을 차근차근 구현해보겠습니다.

일반적으로 풀링은 미리 메모리를 확보한 후 new를 통해 인스턴스를 생성한 후 재활용하는 기술입니다. 따라서 컨테이너에 일정 수만큼 인스턴스를 생성하는 것으로부터 시작합니다.

이는 코드로 표현하면 다음과 같이 표현할 수 있습니다.

class BitmapAutoPool{

	private var _pool:Vector.<Bitmap>;

	public function BitmapAutoPool(){
		//적당히 수로 초기화한다.
		_pool = new Vector.<Bitmap>();
	}
}

Continue reading ‘자동 풀링(auto pooling)을 구현해보자.’ »

Closure에 대해

자바스크립트 개발자들이 클로저에 대해서 매우 깊이 이해하는데 비해 as3를 쓰시는 개발자 분들은 놀랍게도 클로저를 거의 이해하지 못하고 있다는 게 어쩔 때는 참 당황스럽습니다. 그래서 그 이유부터 제 나름대로 짚어봤습니다.

  1. AS3가 매우 추상적인 수준으로 ECMA스크립트를 래핑하고 있어 하부의 prototype기반 구조를 거의 은닉한다.
  2. 동적 함수 생성을 자제하는 정적 구조를 권장하기 때문에 런타임 함수 생성을 기본적으로 사용하는 자바스크립트에 비해 거의 사용되지 않고 있다.
  3. 기본적으로 동적 언어에 대한 이해가 얕고 언어의 정적 형식 지원부분을 공부하여 흡수하기도 벅차한다.

스크립트 언어에 대한 이해가 얕은 정적 언어 개발자들은 as3도 자바나 c++의 연장선으로 사용하기 때문에 아예 동적인 측면을 사용하려 하지 않습니다. 반대로 자바스크립트나 as2를 사용하시던 분들은 as3는 정적 특성대로만 써야 as3를 제대로 쓰는 거다라고 얘기를 들어 동적인 스타일을 as3에서 사용하려 하지 않습니다.

Continue reading ‘Closure에 대해’ »

가비지컬렉터 와 메모리 관리

오늘 용호님네 블로그에 새 글이 올라와서 놀러갔다가 최신 댓글이 달린 글을 찾아가보니 아래와 같은 글이었습니다.

Flash Player 의 가비지 컬렉션(GC) 동작 방식에 대해

 

이거 오래 전에 쓴 글인데도 검색되어 꾸준히 댓글이 달리는걸 보니 어느 정도 개발하시다가 보면 다들 메모리 관리에 관심들을 가지시는 건가 라는 생각이 들었습니다.

사실 가비지컬렉팅에 집착하시는 것 자체가 제게는 좀 이상해 보이긴 합니다. 아주 근본적으로 메모리에 대해서 생각해 봅시다. 결국 메모리에 뭔가 썼다는 건 사용하기 위해 썼다는 거죠. 자기가 무엇을 위해 메모리를 사용하지 모르고 쓰는 경우는 없습니다. 그런데 왜 문제가 될까요?

문제가 되는 부분은 바로 메모리를 낭비하기 때문입니다. 메모리를 낭비하는 유형을 간단히 정리해봅시다.

  1. 재활용될 수 있는 객체인데도 그 때마다 new를 한다.
  2. 인스턴스의 갯수가 고정적이지는 않지만 최대 생성될 양을 알고 있는 경우는 최대양만큼 new를 해두고 사용해야 한다(결론적으로 최대 양까지 메모리를 사용할 것 임) 만약 이 경우 new를 그 때마다 한다면 역시 낭비될 소지가 다분하다.
  3. 적절히 직렬화하여 객체를 값으로 바꿔주지 않았다(값은 즉시 메모리에서 해지된다)
  4. 지역변수 즉 스택메모리 구조로 사용할 수 있는 것을 속성 등으로 잡았다.

객체를 값으로 바꾸어 처리하는 기술은 광범위한 주제라 나중에 다루기로 하고, 객체에 대해서만 생각해보면 한 가지로 압축할 수 있습니다. 메모리가 문제인 경우는 바로 계획하지 않고 new를 남발한다는 점입니다.
Continue reading ‘가비지컬렉터 와 메모리 관리’ »

as3 data container

변수란 무엇인가?

콜렉션에 들어가기 전에 변수가 무엇인지 생각해봅시다. 구조형 언어가 주류인 현재, 우리는 폰노이만 형식의 프로그램을 짜고 있습니다. 초 간단히 이를 정리하면 여러분이 하실 수 있는 일은 기껏해야 3가지 밖에 없다는 겁니다.

  1. 메모리에 있는 값을 가져온다.
  2. 연산을 통해 값을 변경한다.
  3. 메모리에 값을 쓴다.

이 세 가지 행위로부터 수많은 테크닉과 형식이 발전된 게 오늘날 소프트웨어 방법론입니다. 쨌든 이것을 기반으로 생각해보면 개발 시 가장 중요하게 생각해야 하는 부분은 메모리 컨트롤 이라는 점입니다.

메모리 컨트롤을 하는 기술은 크게 두 가지로 나눌 수 있습니다.

  1. 메모리의 위치를 조회하는 메모리주소 컨트롤
  2. 메모리의 값을 조회하는 메모리 값 컨트롤

메모리란 말하자면 거대한 플립플롭 공간입니다. 값을 기록하고 싶으면 먼저 메모리 공간에서의 위치를 확보해야 합니다. 메모리의 특정 위치를 메모리 세그먼트라 하는데 프로그래밍을 통해 코딩한 메모리 세그먼트 접근은 실제로 물리메모리 층에 명령을 내리게 되어 연산을 통해 해당 메모리 위치에 접근하게 됩니다.
Continue reading ‘as3 data container’ »