1. Serial GC단일 스레드로 동작하며 모든 애플리케이션 스레드를 중단(stop-the-world) 한 스레드가 메모리를 정리주로 메모리가 작거나 단일 코어 환경에서 사용한다.2. Parallel GC여러 개의 GC 스레드를 통해 stop-the-world 를 빠르게 처리오래된 Java(8 이하)에서 기본 GC로 많이 쓰였으며, 현재도 고성능 환경에서 선호될 수 있음3. CMS(Concurrent Mark-Sweep)애플리케이션과 병렬적으로 안쓰는 메모리를 수거했다.Java 8버전에서 주로 사용했으며 이후 Java 9부터는 G1 버전 사용CMS의 단편화 이슈CMS는 힙(old)을 Mark & Sweep 알고리즘 방식으로만 회수하기 때문에 사용이 끝난 객체 영역을 연속적으로 압축하진 못한다.그 결과 ..
JVM
도입최근 Prometheus로 운영서버의 JVM 관련 Metric을 수집하는 기능을 만들었다. 이때 GC가 메모리를 얼마나 회수해가는지에 대한 지표를 확인할 수 있었는데 "GC가 어떻게 버려진 객체들을 회수하지?" 라는 의문점이 들어 본격적인 Posting을 하게되었다. 그럼 우선적으로 JVM이 무슨 일을 하는가? JVM이 해주는 작업중 Core 한 기능들은 여러가지가있다.클래스 파일 실행JIT 컴파일러 사용GC(Garbage Collector)를 통한 메모리 관리우리는 이 중 GC에 대해서 Deep Dive 해보자 💡What is GC(Garbage Collector)?GC(Garbage Collector)는 우리가 인풋으로 준 클래스파일을 실행하는 도중에 실행되며, Heap 메모리에서 동작하고 JV..