0:00:00.280,0:00:03.010 안드로이드가 사용하는 자바 언어의 가장 큰 장점 중 하나는 0:00:03.010,0:00:05.520 메모리 관리 환경이라는 점이죠 0:00:05.520,0:00:08.400 너무 연연하지 않아도 된다는 뜻이에요 0:00:08.400,0:00:11.060 객체가 생성되고 해제되는 타이밍에 대해서 말이죠 0:00:11.060,0:00:12.620 메모리 관리 환경은 편리하긴 하지만 0:00:12.620,0:00:17.330 보이지 않는 곳에서 성능 문제가 발생할 수 있어요 0:00:17.330,0:00:18.240 잊지 마세요 0:00:18.240,0:00:21.940 안드로이드 런타임의 메모리 힙은 스페이스라는 단위로 나누어져 있어요 0:00:21.940,0:00:23.720 메모리를 차지하는 데이터의 종류와 0:00:23.720,0:00:27.980 시스템이 GC를 최적화할 수 있는 방법을 기준으로 스페이스를 분류해요 0:00:27.980,0:00:30.580 각 스페이스는 메모리 크기가 지정되어 있어요 0:00:30.580,0:00:34.630 객체에 할당된 메모리의 크기가 스페이스의 총 크기에 근접하면 0:00:34.630,0:00:38.050 GC가 실행되어 불필요한 객체를 해제하고 0:00:38.050,0:00:40.182 메모리 일부를 반납해요 0:00:40.182,0:00:43.935 보통 GC 이벤트는 애플리케이션 성능에 큰 문제를 일으키지 않아요 0:00:43.935,0:00:46.749 하지만 GC가 반복적으로 발생하면 0:00:46.749,0:00:48.915 프레임 타임의 큰 부분을 차지하게 됩니다 0:00:48.915,0:00:50.725 GC를 하는 시간이 길어질수록 0:00:50.725,0:00:54.492 렌더링과 오디오 스트리밍 등 다른 작업을 할 시간이 줄어들어요 0:00:54.492,0:00:59.172 개발자가 자주 맞닥뜨리는 GC 관련 성능 문제 중 0:00:59.172,0:01:00.792 메모리 누수라는 상황이 있는데요 0:01:00.792,0:01:04.272 메모리 누수는 애플리케이션이 더 이상 사용하지 않는 객체를 0:01:04.272,0:01:07.402 GC가 가려내지 못하는 상황을 일컫는데요 0:01:07.402,0:01:09.502 결과적으로 불필요한 객체가 해제되지 않고 0:01:09.502,0:01:13.282 스페이스의 소중한 공간을 차지해[br]다른 객체들이 스페이스를 활용할 수 없게 돼요 0:01:13.282,0:01:14.542 메모리 누수가 지속되면 0:01:14.542,0:01:19.092 메모리 힙의 가용한 공간이 매 세대마다 줄어듭니다 0:01:19.092,0:01:22.230 그래서 GC 이벤트가 더 자주 실행돼요 0:01:22.230,0:01:25.490 프로그램 실행 중 필요한 메모리를 확보하기 위해서 말이죠 0:01:25.490,0:01:28.530 메모리 누수를 찾고 고치는 건 까다로워요 0:01:28.530,0:01:30.040 누수는 아주 간단한 이유로도 발생하거든요 0:01:30.040,0:01:33.790 예를 들어 프로그램이 사용하지 않는 객체에 대해[br]순회적인 참조를 하면 발생해요 0:01:33.790,0:01:35.410 반면 복잡한 누수도 있어요 0:01:35.410,0:01:39.680 Class loader 객체에 대한 핸들러를 생성한 후[br]해제해주지 않을 경우처럼 말이죠 0:01:39.680,0:01:42.270 경우가 어떻든 매끄럽고 빠른 애플리케이션은 0:01:42.270,0:01:45.640 메모리 누수의 존재를 인지하고 민감하게 대처해야 해요 0:01:45.640,0:01:48.160 생각해봐요 여러분의 코드는 수많은 기기에서 실행될 테고 0:01:48.160,0:01:49.270 기기마다 제각각 0:01:49.270,0:01:52.150 메모리 크기와 사용량이 다르겠죠 0:01:52.150,0:01:56.420 다행히도 메모리 누수 찾는 작업을 도와주는 간단한 툴이 있어요 0:01:56.420,0:01:57.850 안드로이드 SDK에 말이죠 0:01:57.850,0:01:58.800 함께 살펴볼까요?