ultra_dev
GC(Garbage Collector) 본문
GC
:가비지 컬렉터
- 메모리 관리 방법중 하나로 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아서 자동으로 사용 가능한 자원으로 회수시켜준다.
- Jvm 메모리의 Heap 영역에 위치한 GC는 Unreachable Object를 찾아 제거함으로써 Heap영역의 메모리를 관리 (해당 행위를 Mark and Sweep이라고 부름)
- Unreachable Object : stack에 도달할 수 없는 객체
- stop the world : GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다.
- stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다.
- 만약 더 이상 사용되지 않는 객체들이 GC(가비지 컬렉션)에 의해 소멸되지 않고 누적된다면, 메모리 누수(MemoryLeak) 현상이 발생
- 메모리 누수가 쌓이면 메모리가 부족하게 돼서 결과적으로 OutOfMemoryError 가 발생
- 가비지 컬렉터는 메모리 누수인지도 모르고, 메모리가 부족하니까 계속 메모리를 회수하려고 가비지 컬렉션을 지속적으로 발생시킴
- 결국 너무 자주 일어나는 가비지 컬렉션은 성능상 문제를 일으키게 됨
- 메모리 누수가 의심되면 HeapDump 분석을 통해서 의심가는 부분을 잡아내고, 추후 운영 단계에서는 스카우터 같은 APM(Application Performance Management)을 활용해서 모니터링 체계를 구축하는 방법을 추천
+ APM
- 어플리케이션의 성능 관리 서비스
- 미들웨어(톰캣, 제이보스 등)에서 일어나는 트랜잭션을 분석하여 성능에 영향을 미치는 부분을 탐지
- 서비스에 문제가 발생하거나 비효율적으로 서비스가 운영되고 있을 때 서버로그를 뒤적거리면서 문제점을 찾기에는 너무나 많은 시간이 소요되고 찾기도 힘들다.
- 이 때, APM을 사용하면 문제점을 빠르게 탐지할 수 있다.
+
추가 키워드
에덴 / 영 , 올드제네레이션
객체 힙메모리에 할당 시 먼저 에덴에 할당,
꽉 차면 영제네레이션 내 서바이벌 영역 왔다갔다하면서
age올림
임계점 돌파시 올드제네레이션 영역으로 보내버림
이 올드제네레이션 영역에 있는 객체는 오랫동안 지워지지 않았다는 거니 메이저GC가 아니면 지우질 않음
이를 통해 GC를 효율적으로 사용
'Computer Science' 카테고리의 다른 글
HTTP/3 -> 왜 TCP가 아닌 UDP를 사용할까 (0) | 2023.04.11 |
---|---|
CORS란 (0) | 2023.04.07 |
RDB와 NOSQL (0) | 2023.04.06 |
오버로딩, 오버라이딩 (0) | 2023.04.05 |
시간 복잡도, 공간 복잡도 (0) | 2023.04.05 |
Comments