SlideShare a Scribd company logo
1 of 43
Download to read offline
3104 김다은
메모리 누수를 발생시키는 개발자가 있다?
목차
1. 메모리 관리의 중요성
2. 프로그래밍 언어의 메모리 관리 기법
3. ARC VS 쓰레기 수집(Garbage Collection)
CPU 명령어데이터
1. 메모리 관리의 중요성 🔑
CPU
명령어데이터
메모리
(주기억장치)
레지스터
1. 메모리 관리의 중요성 🔑
CPU
메모리
(주기억장치)
레지스터
데이터 명령어
1. 메모리 관리의 중요성 🔑
운영체제의 기능 중 하나!
스와핑, 연속 메모리 할당, 페이징, 세그멘테이션 등
1. 메모리 관리의 중요성 🔑
그런데 왜 나는 메모리 누수 문제를 겪는가
1. 메모리 관리의 중요성 🔑
운영체제가 완벽하게 메모리를 관리해줄 수는 없다!
1. 메모리 관리의 중요성 🔑
운영체제가 완벽하게 메모리를 관리해줄 수는 없다!
메모리 관리는 개발자의 기본
1. 메모리 관리의 중요성 🔑
모든 프로그래밍 언어는 메모리 관리를 위한 기능 제공
2. 프로그래밍 언어의 메모리 관리 기법 🛠
C언어
malloc()
free()
개발자가 직접 명시
2. 프로그래밍 언어의 메모리 관리 기법 🛠
대부분의 현대 프로그래밍 언어에서는 자동으로 메모리를 관리하는 기법 제공
2. 프로그래밍 언어의 메모리 관리 기법 🛠
Swift - ARC(Automatic Reference Counting)
참조의 숫자를 자동으로 세는 메모리 관리 기법
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
순환 참조가 발생할 수 있음
2. 프로그래밍 언어의 메모리 관리 기법 🛠
Swift - ARC(Automatic Reference Counting)
순환 참조가 발생할 수 있음
약한 참조, 미소유 참조를 활용하여 방지
2. 프로그래밍 언어의 메모리 관리 기법 🛠
동적 할당된 메모리 영역 가운데
더 이상 사용할 수 없게 된 영역을 탐지하여 자동으로 해제하는 메모리 관리 기법
가비지 컬렉터: 쓰레기 수집을 수행하는 프로그램
2. 프로그래밍 언어의 메모리 관리 기법 🛠
Java, JavaScript, Python - 쓰레기 수집(Garbage Collection)
Java, JavaScript, Python - 쓰레기 수집(Garbage Collection)
동적 할당된 메모리 영역 가운데
더 이상 사용할 수 없게 된 영역을 탐지하여 자동으로 해제하는 메모리 관리 기법
쓰레기: 어떤 변수도 가리키지 않게 된 영역
2. 프로그래밍 언어의 메모리 관리 기법 🛠
쓰레기 수집의 과정은 추정에 기반
왜? -> 메모리의 일부가 필요할지를 알아내는 것은 풀 수 없는 문제
2. 프로그래밍 언어의 메모리 관리 기법 🛠
대부분의 쓰레기 수집 기법은 포인터 추적 방식을 사용
2. 프로그래밍 언어의 메모리 관리 기법 🛠
다양한 쓰레기 수집 방식이 존재
상황에 따라 필요한 방식을 설정해서 사용
세대 단위 쓰레기 수집 기법을 기반으로 함
Java에서의 쓰레기 수집
2. 프로그래밍 언어의 메모리 관리 기법 🛠
세대 단위 쓰레기 수집 기법?
새롭게 할당될 영역일수록 금방 해제될 확률이 높다는 가설을 이용하여,
객체를 할당된 시간에 따라 세대별로 구분하여 관리하는 쓰레기 수집 기법
2. 프로그래밍 언어의 메모리 관리 기법 🛠
Young Generation
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2012년 기준 모든 최신 브라우저들은
표시하고 쓸기(Mark and Sweep) 기법 사용
JavaScript에서의 쓰레기 수집
2. 프로그래밍 언어의 메모리 관리 기법 🛠
2. 프로그래밍 언어의 메모리 관리 기법 🛠
기본적으로 참조 횟수 계산 기법(Reference Counting) 사용
Python에서의 쓰레기 수집
2. 프로그래밍 언어의 메모리 관리 기법 🛠
Python에서의 쓰레기 수집
기본적으로 참조 횟수 계산 기법 사용
순환 참조 상황 발생
cyclic garbage collection을 수행하는 별도의 가비지 컬렉터 사용
2. 프로그래밍 언어의 메모리 관리 기법 🛠
cyclic garbage collection은 언제 발생?
0세대
임계값: 사용자 설정
1세대
임계값: 10
1세대
임계값: 10
2. 프로그래밍 언어의 메모리 관리 기법 🛠
cyclic garbage collection은 언제 발생?
0세대
임계값: 사용자 설정
1세대
임계값: 10
1세대
임계값: 10
객체2 객체3객체1
2. 프로그래밍 언어의 메모리 관리 기법 🛠
cyclic garbage collection은 언제 발생?
0세대
임계값: 사용자 설정
1세대
임계값: 10
1세대
임계값: 10
객체3객체1
2. 프로그래밍 언어의 메모리 관리 기법 🛠
cyclic garbage collection은 언제 발생?
0세대
임계값: 사용자 설정
1세대
임계값: 10
1세대
임계값: 10
객체3객체1
2. 프로그래밍 언어의 메모리 관리 기법 🛠
cyclic garbage collection은 언제 발생?
0세대
임계값: 사용자 설정
1세대
임계값: 10
1세대
임계값: 10
객체3
2. 프로그래밍 언어의 메모리 관리 기법 🛠
3. ARC 🆚 쓰레기 수집(Garbage Collection)
ARC는 컴파일 할 때 작동, 단지 release 코드를 삽입하는 역할
쓰레기 수집은 실행 중에 작동
감사합니다

More Related Content

Similar to 컴퓨터공학 스터디 W2 발표: 프로그래밍 언어의 메모리 관리 기법

[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
MinGeun Park
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
Junnie Jobs
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
Minsuk Lee
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
Samsung Electronics
 

Similar to 컴퓨터공학 스터디 W2 발표: 프로그래밍 언어의 메모리 관리 기법 (20)

[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4ppt
 
Event Loop - Java Script
Event Loop - Java ScriptEvent Loop - Java Script
Event Loop - Java Script
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr
 
Process에 대한 이해
Process에 대한 이해Process에 대한 이해
Process에 대한 이해
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 

컴퓨터공학 스터디 W2 발표: 프로그래밍 언어의 메모리 관리 기법