본문 바로가기

카테고리 없음

Garbage Collection 이란 ?

 안녕하세요~!! 오늘은 가비지 컬렉션에 대해서 포스팅하려 합니다.

 

 이에 대해 포스팅하게 된 계기는 .. 음,

 요즘 C++ 공부중인건 저번에 말씀드렸는데요,

저희 학교 컴공과 언어커리큘럼이 C언어 - 자바 이렇게 두개로 시작했었는데,

제 아래 학번은 음.. C - C++ - 자바 이렇게 세가지를 배우더라구요! 하하! 참나!

(나도 C++ 배우고싶은데..)

 전 독학할겁니다! ㅋㅋ 하고있는데.. 너무어려워요 ㅠㅠ 같은 객체지향언어라지만, 이렇게 다를줄이야..

 

 C++과 자바의 가장 큰 차이가 메모리 관리방법인 것 같아서 이 주제를 선택했습니다 ㅎㅎ

 

 일단 가비지 컬렉션에 대해서 공부하기 전에, 제 생각을 말하고 시작할게요!

 

 제가 아는 가비지 컬렉션은 음,

 혹시 C언어를 배울 때, 변수를 선언하고 그대로 출력해보신 경험 있나요??

 출력해 보신다면, 그 안에 막 이상한 값들이 들어있는 것을 볼 수 있습니다.. 그걸 쓰레기값(?) 이라고

프로그래밍 처음 입문할 적에 들었던 기억이 있어요! 

 이처럼, 여기서도 불필요한 메모리(객체)를 쓰레기라는 단어를 사용하는 것 같다! 가 제 생각입니다.

 

 그렇다면, 실제 뜻은 무엇일까요 ?

 

       쓰레기 수집(garbage collection 가비지 컬렉션[*], GC)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할            당 했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능

                                                                                                                       출처 : 위키백과

 

 제 생각과 비슷하네요 ㅎㅎ

 

 자바와 같은 객체지향언어는 동적으로 메모리를 할당한 후, 더 이상 사용하지 않는 메모리를 자동으로 해지합니다.

이가 바로, 가비지 컬렉션에 의한 메모리 관리인데요! 가비지 컬렉션이라는 알고리즘에 의해 자동 관리되기 때문에,

메모리를 프로그래머가 임의로 조작하면 안됩니다! 

 하지만, 자동 관리가 편하기때문에 항상 좋을까요??

그렇지 않습니다^^ 가비지 컬렉션이라는 알고리즘은 자바 메모리 영역 중, Heap 영역에 관여하게 되는데요!  

Heap영역을 나눠, 오래되고 쓰지않는 메모리와 사용하는 메모리로 나누게 됩니다.

이 때, 한 영역에서 타 영역으로 이동하며 생기는 데이터 병목현상에 의해 성능에 영향을 주게되는 것입니다.

 

 반면, C++은 알고리즘에 의해 이동되는 것이 아니라, 프로그래머가 메모리를 해제하기 때문에, 병목현상이 생길 여지가 비교적 적어, 성능이 빠르게 되는 것이겠죠?

 

 가비지 컬렉션이 작용하는 방식은 여러가지가 있으며, 이를 성능테스트 시, 또는 서버 세팅 시에 프로그래머가 적절한 방식으로 선택하여 성능을 최대한 올리는 것이 최선의 방법입니다^^

 

 1일 1포스팅에 맞게 .. 깊은 내용은 따로 다룰테니, 이해만 하고 넘어가는 수준으로 작성한 점 죄송합니다..

감사합니다^^