서버에서 살아남기

Garbage Collection 이란? 본문

python

Garbage Collection 이란?

개발롬 2023. 7. 22. 14:34

1. 개념

  • 프로그래밍 언어에서 더 이상 사용되지 않는 메모리를 자동으로 탐지하고 회수하는 메모리 기법입니다.

2. 목적

  • 메모리 누수를 방지하고, 프로그래머가 메모리 할당과 해제에 대해 걱정하지 않고도 안정적인 프로그램을 작성할 수 있도록 돕는 것입니다.

3. 기능

1) 동적 메모리 관리
: 프로그램이 실행 중에 필요한 메모리를 할당하고 더 이상 사용하지 않는 메모리를 자동으로 해제합니다.

* 동적 메모리
- 프로그램 실행 중에 필요한 메모리를 런타임 시점에 할당하고 해제하는 메모리 영역
- 주로 동적으로 크기가 결정되는 데이터 구조나 실행 중에 생성되는 객체 등을 저장하기 위해 사용됨

* python 에서 동적 메모리 관리하는 법
1. 객체 생성 : python에서 객체는 자동으로 메모리에 생성됩니다.
2. 메모리 회수 : python의 가비지 컬렉터가 더 이상 참조되지 않는 객체를 자동으로 탐지하고 해당 객체의 메모리를 회수합니다.

python은 python 인터프리터 자체에서 메모리 관리를 처리합니다. 그래서 명시적인 코드를 작성할 필요가 없습니다.

2) 불필요한 객체 식별
: 더 이상 참조되지 않는 객체를 식별합니다.

3) 메모리 회수
: 더 이상 필요하지 않는 메모리를 회수하여 다른 용도로 재사용하도록 합니다.

4. 지원

  • 대부분의 언어에서 가비지 컬렉션을 지원하기 때문에 가비지 컬렉션을 직접 구현할 필요는 없습니다.
  • 더 이상 사용되지 않는 객체를 식별하고 메모리를 회수하기 대문에 메모리 누수를 방지합니다.
  • java, python, javascript, ruby, go, kotlin 등의 언어에서 지원합니다.

5. 동적 메모리 관리 vs 가비지 컬렉션

  • 동적 메모리 관리 : 메모리를 직접 할당하고 해제하는 작업
  • 가비지 컬렉션 : 메모리 할당과 해제를 자동으로 처리하는 매커니즘
❓ 그럼 여기서 드는 의문점!
굳이 직접 메모리 관리 할 필요없으니 아무것도 안하면 되는거 아닌가? 가비지 컬렉션이 알아서 해주니까?

- 가비지 컬렉션을 지원하는 언어를 사용할 때 메모리 할당과 해제에 대해 많은 고민과 작업을 하지 않아도 되지만, 아래의 부분들은 신경 써야합니다.
1. 참조 관리 : 가비지 컬렉션이 더 이상 사용되지 않는 객체를 회수하지만 여전히 활성화된 객체의 참조가 유지 될 수 있기 때문에 불필요한 참조를 제거해야합니다.
    - ex. 변수 할당 해제, 안쓰는 객체 삭제

2. 메모리 사용 패턴
    - 메모리 할당 횟수 줄이기 : 반복적으로 작은 객체를 많이 생성하기 보다, 큰 객체를 한 번만 생성하여 재사용 하기
    - 사용이 끝난 리소스 적절히 해제하기 : 파일, 데이터베이스 연결 등은 가비지 컬렉션 대상이 아니므로 적절히 닫아주기

'python' 카테고리의 다른 글

디자인 패턴 - 싱글톤 디자인 패턴  (0) 2023.08.01
이해가 안가서 정리하는 FastAPI 동작 원리  (0) 2023.07.24
SQLAlchemy + alembic 마이그레이션  (0) 2023.07.22
python 파일  (2) 2023.03.11
Django vs Fastapi  (0) 2022.06.19