다양하게 많은 언어 환경에 가비지 컬렉터라는 개념은 존재한다.
딱히 내가 설정을 해주지 않아도 알아서 메모리 자원을 관리해주기 위해 존재한다.
C를 배웠다면 malloc 함수가 있는데 C에서는 위에서 말한것처럼 메모리 동적 관리를 하며 다 적어줘야했다.
C나 C++처럼 오래 된 언어에는 직접 모든것을 하나하나 써줘야만 했다.
예를들어서 집에서 나가는 것을 묘사한다면
- 씻고 준비한다.
- 옷을 입는다.
- 신발장 문을 연다.
- 신발을 꺼낸다.
- 신발장 문을 닫는다.
- 신발을 신는다.
- 문을 연다.
- 밖으로 나간다.
- 문을 닫는다.
이런 동작들은 사람들은 하게 된다.
아무리 생각을 해도 지금 저정도이고 좀더 생각해보면 씻고 준비한다에서도 샤워기 물을 틀고 끄는것도 넣어줘야하고 할게 너무나도 많다.
비유를 외출로 해서 그렇지 코드로 짜면 더욱 복잡하다.
신중하게 개발자가 코드를 짜도 비워져야할 메모리 공간을 놓치는게 분명 생기기 마련이다.
이런것을 메모리 누수, memory leak라고 한다.
여기서 메모리가 꽉차면 컴퓨터는 다운이 되거나 블루스크린이 뜨거나 다양한 동작들을 한다.
그리하여 자바를 비롯한 새로운 언어들에는 이것을 방지 하기 위한게 생겼는데 이럴 때 사용되는게 가비지 컬렉터이다.
가비지 컬렉터가 존재하여 메모리를 관리해주는 언어들을 managed language 라고 한다.
언어와 동작 환경 런타임 등에 따라 다 다르겠지만 결국 필요하지 않는 것들을 없애거나 치워주면서 관리가 되게 한다.
물론 가비지 컬렉터도 완전 100% 누수를 잡아내지는 못한다.
그런것들을 대표적으로는 순환참조가 있다.
순환 참조는 서로 서로를 참조하기 때문에 레퍼런스가 0이 절대 될수가 없어서 가비지컬렉터는 이것을 삭제 하지 않는다.
그리하여 가비지 컬렉터만을 믿고 코딩을 함부러 작성은 하면 안되고, 좋은 프로그래머가 되려면 메모리 관리 부분도 신경을 써줘야한다.
'IT > Knowledge' 카테고리의 다른 글
안드로이드 13 티라미수(Tiramisu) (65) | 2022.03.17 |
---|---|
try - catch - finally 예외처리란? (48) | 2022.03.16 |
서버 vs 클라우드 (50) | 2022.03.14 |
객체지향 디자인 패턴 심화 정리 part.3 (47) | 2022.03.13 |
객체지향 디자인 패턴 심화 정리 part.2 (42) | 2022.03.12 |
댓글