Flutter

Flutter - 메모리 관리

Daesiker 2025. 3. 31. 16:08
반응형

‼️ 이 포스팅은 iOS메모리 시점으로 작성되었습니다.

개요

Flutter를 시작하기에 앞서 메모리 관리를 어떻게 하는지 궁금증이 생겨 최대한 정리해보았습니다. 

아직은 이론만 공부 중이라 100% 정답이 아니라고 생각하고, 이 포스팅을 토대로 프로젝트에 적용하면서, 궁금증 해소 및 개념을 확립시킬 예정입니다.

 

Dart 데이터 타입

✅ Dart는 모든 것이 객체(Object)이다.

✅ Swift와 동일하게 타입에 따라 저장위치가 다르다.

✅ Swift는 Array(List), Dictionary(Map)이 값 타입이지만, Dart에서는 참조 타입이다.

 

Flutter 메모리 구조

Flutter는 Dart로 작성된 코드와 네이티브 코드(iOS/Android)를 함께 쓰기 때문에

메모리 구조도 크게 Dart 측 메모리네이티브 측 메모리로 나뉘어 진다.

서로 독립적인 공간을 가지고 있고, Platform Channels로 데이터 주고받음

1. Dart VM 메모리

Heap (힙)

  • Dart 객체 (List, Map, Widget 등)는 대부분 힙에 저장됨
  • 클래스 인스턴스, 클로저(익명 함수), Future, Stream 등도 여기에 있음

Stack (스택)

  • 함수 호출 시 스택 프레임으로 생성
  • 지역 변수나 임시 연산 결과 등 간단한 값들이 일시적으로 올라옴

2. 네이티브 메모리

  • 플러그인(native code)이 사용하는 메모리는 Dart GC가 관리하지 않음
  • 일반 네이티브 프로젝트와 동일하게 메모리 동작

 

Flutter 메모리 관리

Flutter에서는 General Garbage Collection을 사용해 메모리를 관리하여, ARC보다는 조금 더 편하게 관리가 가능하다.

General Garbage Collection

📦 GC 구조

Heap
├── New Generation (Young Space)
│   ├── SemiSpace (Scavenger)
├── Old Generation (Old Space)

New Generation

  • 새 객체 생성 시 할당되는 공간

SemiSpace

  • Scanvenger GC 방식(시간은 효율적, 공간은 비효율적)으로 빠르게 참조되지 않은 객체를 회수한다.
  • 여러번 살아남은 객체를 Old Generation으로 승격시킨다.

Old Generation

  • 오래 살아남은 객체들이 저장되는 공간이다.
  • Mark-and-Sweep 방식(시간 비효율, 공간 효율)으로 참조되지 않은 객체를 회수한다.

 

정리

  • Flutter은 독자적인 메모리 공간을 가지고 있다.(Flutter VM)
  • List와 Map은 참조 형식으로 메모리에 할당된다.
  • Generation GC로 메모리를 관리한다.
  • 메모리 누수에 대한 고려를 해야한다.
반응형

'Flutter' 카테고리의 다른 글

Flutter 설치 방법  (0) 2025.03.24