Dalvik VM: GC Heap에 대한 Overview
Dalvik VM 은 Java VM과 마찬가지로 garbage collection 되는 heap을 제공한다. 즉, 할당된 메모리에 대해 명시적으로 메모리 해지를 할 필요가 없다. 하지만, Dalvik GC heap의 내부 구현을 들여다보면 기존 Sun JDK가 제공하던 GC heap과는 상당히 다른 구현방법을 따르고 있음을 알 수 있다. 이런 차이로 Java 코드 작성 시 주의해야 할 점 이 생긴다. 이 글에서는 Dalvik의 GC heap의 구조와 객체가 생성되어 메모리를 할당받는 방식에 대해 살펴보도록 하겠다. (실제 garbage collection이 이루어지는 과정에 대해서는 다음 글에서 다루도록 한다.) GcHeap - Garbage Collected Heap 구조체 Dalvik 은 내부 Heap을 관리하기 위해 GcHeap이라는 구조체를 사용한다. 이 구조체의 주요 멤버 변수들을 살펴보면서 GC Heap의 디자인에 대해 살펴보도록 하자. HeapSource *heapSource; heapSource 에는 GC Heap이 사용하는 메모리 공간에 대한 정보를 저장한다. Heap 메모리의 포인터, 초기 크기, 최대 크기 등의 정보를 관리한다. GC Heap에서 사용되는 Heap 메모리는 dlmalloc이라는 오픈소스 메모리 관리자를 사용하여 구현되어 있다. dlmalloc의 create_mspace 함수를 호출하여 생성된 mspace 포인터를 HeapSource로 관리한다. (참고. dlmalloc 이란?) dlmalloc은 State University of New York at Oswego 교수님이신 Doug Lee 가 작성한 오픈소스 메모리 관리자이다. Doug Lee가 Solaris나 기존 UNIX 환경에서 사용하던 메모리 관리자에 불만을 느끼고 성능 및 fragmentation 이슈를 최소화한 메모리 관리자를 목표로 개발한 오픈소스 코드이다. Android는 GC Heap에서 객체를 allocation하고 free 하는 ...