Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 멀티스레드
- 백엔드 개발자
- 캐시서버
- EKS
- CPU스케쥴링
- nestjs
- 쿠베네티스
- FastAPI
- 회고
- 스케줄링
- Django
- 로드밸런서
- 스레드풀
- Python
- SQLAlchemy
- K8S
- golang
- 가비지컬렉션
- 분산처리
- 쿠버네티스
- 싱글톤 디자인 패턴
- uvicorn
- 2022년
- 글또
- 메모리구조
- alb
- Alembic
- nodejs
- AWS
- gunicorn
Archives
- Today
- Total
서버에서 살아남기
Garbage Collection 이란? 본문
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 |