최근 즐겨보는 유튜브 채널에서 재밌는 면접 질문을 보았다.
웹 백엔드 개발자를 위한 주제는 아닌것 같긴 한데, 주제가 상당히 흥미롭고 재밌어서 작성해본다. GC에 대한 이해도를 높힐 수 있어 좋은 시간이었다.
스택과 힙의 차이
멀티스레딩 환경에서의 스택과 힙의 차이
- 스택
- 해당 스레드용
- 메모리의 수명 파악 가능
- 코드의 깊이로
- 지나치게 깊은 스택은, 코드의 가독성을 떨어트린다.
- 힙
- 멀티스레드 환경에서의 전역변수 역할
- 고수준 언어에서, 스택과 힙은 반드시 필요하다.
메모리 단편화
네이티브 메모리 할당의 문제점
- malloc은 느리다.
- 시스템 콜이 필요함
- 이는 nio의 native memory 할당에도 같이 적용된다.
- 따라서, 메모리 할당과 해제에 신중해져야 한다.
- 할당받은 native 메모리를, 직접 쪼개가며 재사용해야 할 수도 있다!
메모리를 직접 쪼개 쓸 때의 문제
- 메모리 할당을 어떻게 할 것인가?
- Dynamic Storage Allocation Problem
- 운영체제에서 고민하던 문제가, 개발자의 구현으로 넘어온다!
- 메모리 단편화 문제
- 연속적인 메모리 할당이 불가능해지는 문제
- 원하는 크기의 연속된 빈 메모리 공간이 없는 문제
- 50% rule
- 최초 적합의 경우
- 통계적으로 N개의 블록이 할당되었을 때, 0.5N개의 블록은 사용할 수 없게 된다는 규칙.
해결 방법
- 메모리 풀 사용
- 메모리 사용 패턴이 정해져 있을 때
- 페이지 단위로 관리 → 위 Dynamic Storage Allocation Problem 참고.
- 메모리의 사용 패턴이 정해져 있을 때 유용하다.
- 메모리의 사용 패턴이 불규칙할 경우, 사용하기 어려워진다.
- 메모리 compaction 구현
'Article > OS - Deep Dive' 카테고리의 다른 글
메모리 압축(Memory Compaction), 그리고 Garbage Collector (0) | 2025.04.15 |
---|---|
메모리 단편화와 페이징 (0) | 2025.04.14 |
메모리 할당 문제, 그리고 메모리 단편화 (0) | 2025.04.14 |
Java I/O vs Java NIO - 왜 NIO는 단일 버퍼 모델을 채택했을까? (0) | 2025.04.12 |
[OS] Thread의 정의와 Thread Pool, 그리고 적절한 Thread의 갯수 (0) | 2024.09.29 |