DongDD's IT

Garbage Collection - Garabge, Garbage collection, 정의, 알고리즘 본문

기타

Garbage Collection - Garabge, Garbage collection, 정의, 알고리즘

DongDD 2018. 10. 16. 14:04

Garbage Collection



Garbage


Definition


- 특정 메모리 영역을 사용하고 이후에 사용하지 않는데도 지속적으로 해당 영역에 남아 있어 메모리 낭비


Effect


1. Dangling Pointer

- 메모리를 사용 후 직접적으로 free를 해주어야 하기 때문에 garbage collection을 사용하지 않으면 사용되지 않는 메모리 영역이 생길 수 있음


2. Double Free

- 메모리를 사용 후 직접적으로 free 해주어야 하기 때문에 garbage collection을 이용하지 않으면 한 영역을 두번 free하는 경우가 생길 수 있음


3. Memory Leak

- 사용되지 않는 메모리때문에 메모리 누수가 일어날 수 있음



Garbage Collection



Definition


- Garbage들을 회수하여 메모리 낭비를 없앰


Language


1. C/C++

- Garbage Collection이 언어 자체에 포함되어 있지 않아 직접 구현해야함

- 사용자가 직접 메모리를 할당하고 해제할 수 있어, 메모리 사용 후 직접 free해주지 않으면 garbage 발생

- Library를 사용하여 Garbage Collection 사용 가능


2. Java, C#, Python

- Garbage Collection이 구현되어 있음

- 동적으로 할당한 메모리 영역을 완벽하게 관리할 필요가 없음


구현 기법(알고리즘)


1. Mark and Sweep

- 할당된 메모리 영역 중 1비트를 mark bit로 사용

- 일정 시간에 garbage collection이 수행되며 접근 가능한 메모리의 mark bit를 확인하여 mark bit가 활성화되지 않은 영역은 swepp(해제)

- garbage collection이 수행되는 도중 메모리가 변경되면 마킹을 다시해야하기 때문에 garbage collection 수행 시 정지(stop-the-world)


ref) stop-the-world : garbage collection을 수행하기 위해 Application을 중지


2. Copying GC

- 동적 메모리가 할당되는 heap 영역을 active와 inactive 영역으로 나누고 active 영역에만 메모리 할당이 이루어지도록 함

- active 영역이 full이 되면 garbage collection을 수행


3. Generational GC

- 동적 메모리가 할당되는 heap 영역을 young, old와 같은 generation으로 나누고 각 generation은 sub heap을 가지고 있는 형태

- 각 generation별로 효율적인 알고리즘 적용 가능



'기타' 카테고리의 다른 글

[Git] Git 설정, commit 내역 변경하기  (0) 2019.03.30
[TDD] Test code 접근 방식, Mock, Mockito, BDD  (0) 2019.03.20
[webhacking.kr] 가입  (0) 2017.09.03
Browser에서 POST 방식 전송  (2) 2017.08.31
Comments