Member-only story
Flutter Memory Leak
๐ Flutter Memory Debugging Series
- Part 1. Flutter Memory Leak โ ์์ธ ํ์ ๋ฐ ์ฌ๋ก ๋ถ์
- Part 2. DevTool-Memory Debugging โ Heap Snapshot ์ค์ ๋ฐ์ดํฐ ๋ถ์
- Part 3. DevTool-Memory View โ ๋๋ฒ๊น ๋ชจ๋ ๋ฐ ๋๊ตฌ ํ์ฉ
โ์ด ๊ธ์ ๋ฉค๋ฒ ์ ์ฉ ์ฝํ ์ธ ์ด๋, [์ฌ๊ธฐ]๋ฅผ ํด๋ฆญํ์๋ฉด ์ ์ฒด ๋ด์ฉ์ ๋ฐ๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.โ
Memory๊ด๋ฆฌ๋ Application์ฑ๋ฅ์ ๋ง์ ์ํฅ์ ์ค๋๋ค.
Memory ๋ฌธ์ ๋ ์ฃผ๋ก ๋ถํ์ํ๊ฒ memory๋ฅผ ๋ง์ด ์ ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด ๋ฐ์ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด app์ด crash ๋๊ฑฐ๋ ์ฑ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
Dart์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด heap memory๊ณต๊ฐ์ ์์ฃผํฉ๋๋ค. ์ด ๊ณต๊ฐ(heap)์ Dart VM์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค. Dart VM์ memoryํ ๋น๊ณผ GC(garbage collection)์ ์ด์ฉํด memoryํด์ ๋ฅผ ํฉ๋๋ค.
Memory leak์ ์ ๋ฐ์ํ ๊น์?
GC๋ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ์ง๋ง ์๋ฒฝํ๊ฒ ํ ์ ์์ด์. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ํญ์ object์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๊ด๋ฆฌํด์ผํฉ๋๋ค. ์ด๋ฅผ ๋ณด์กฐํ๊ธฐ ์ํด DevTool์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ GC๋ ๋ชจ๋ object๋ฅผ ์ ์ ํ unallocate์ํค์ง ๋ชปํ๋ ๊ฒ์ผ๊น์?
GC๊ฐ ๋ชจ๋ unreachable object๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ณธ ์กฐ๊ฑด์, โApplication์ด ์ฌ์ฉํ์ง ์๋ object๋ unreachable ์ด์ฌ์ผ ํ๋คโ ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ, ๋ ์ด์ ํ์์๋ object์ธ๋ฐ reference๊ฐ ๋จ์ ์๋ค๋ฉด ์ด๋จ๊น์? GC๋ unallocate๋ฅผ ํ ์ ์์ฃ . GC ์ ์ฅ์์๋ ์๋ค์ด ์ฌ์ ํ ์ฌ์ฉ๋๋ค๊ณ ์ฌ๊ธฐ๊ฒ ๋๋๊น์. ์ด๋ฐ์ผ์ global ๋ณ์, static ๋ณ์, ๋๋ lifecycle์ด ๊ธด object์์ ์์ฃผ ๋ฐ์๋ฉ๋๋ค. ์ด๋ฐ๊ฒ ๋ฐ๋ณต๋๋ฉด out-of-memory error๊ฐ ๋ฐ์๋๋ ๊ฒ์ด์ฃ .
diagram์ผ๋ก ์ดํด๋ณด์ฃ .
์ฐ๋ฆฌ๋ Object A๊ฐ GC์ ์ํด unallocate๋๋ ์ํฉ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๋ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ํํ์ง๋ง, ๋ชจ๋ ์ํฉ์ ์๋ฒฝํ๊ฒ ํต์ ํ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ GC์ ๋ฉ์ปค๋์ฆ์ ๋งน์ ํ๊ธฐ๋ณด๋ค, ์ ํ๋ฆฌ์ผ์ด์ ๋ด ๊ฐ์ฒด๋ค์ด ์ ์ ํ ํด์ ๋๊ณ ์๋์ง ํญ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด DevTools์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผโฆ










