안녕하세요, 2주 만에 다시 돌아온 3픽레터입니다. 이 뉴스레터에서는 처음 인사 드리네요.
저는 마케팅팀 정지윤입니다. 😊 앞으로 엘렌과 페넬로페, 올리비아와 함께 알차고 유용한 정보를 전달할 예정이니 많은 관심 부탁드립니다.
저는 IT 회사에서 마케터로 일하고 있습니다. 마케팅 업무를 하다 보면, 개발자와 커뮤니케이션이 필수적인데요. 개발자와 소통하다 보면 모르는 IT 용어로 인해 해석하는 데 어려움이 있었어요.
그래서 저처럼 비개발자여도 알면 좋은 개발 용어에 대해 소개해드리고자 합니다. 기본적인 개발 용어를 통해 IT 지식도 쌓을 수 있는 것은 물론, 업무에도 도움이 될 것이라 생각해요. 오늘 소개해 드릴 용어는 ‘GC(Garbage Collection)'입니다. 차근차근 설명해 드릴 테니 잘 따라와 주세요!
#1. 주제픽. Garbage Collection의 동작 원리
자바의 메모리 관리 방법 중 하나가 오늘 소개해 드릴 Garbage Collection(GC)입니다.GC는 자바 애플리케이션에서 사용하지 않는 객체를 자동으로 메모리에서 삭제하는 기능을 의미하는데요, 이를 통해 메모리 안에서 참조되고 있는 객체와 참조되지 않는 객체를 구분한 후, 참조 되지 않는 모든 객체를 전부 수거하여 메모리 누수를 방지합니다.
이처럼 자바에서는 메모리 누수를 탐지하는 GC가 있는 반면, C나 C++ 같이 오래된 언어에서는 메모리를 직접 해체해서 관리를 해야 합니다.
JVM의 Heap 메모리 영역에는 Old Generation과 Young Generation으로 구분되는데요. 자바에서 객체가 생성되면 처음에는 Eden 영역에 저장됩니다. 이후, Eden 영역이 꽉 차게 되면Minor GC가 발생하게 되고, Mark & Sweep 알고리즘을 수행하게 됩니다. 새로운 객체가 Eden 영역에 할당이 되면 Reachable한 객체와Unreachable한 객체를 탐색하는데요. 여기서 살아남은 객체가 Survivor 영역 중 한 곳으로 이동하게 됩니다. Sweep 과정을 통해 Unreachable한 객체는 삭제됩니다.
여기까지 GC 개념과 Minor GC에 대해 알아봤는데요. 그림을 통해 GC 동작원리에 대해 자세히 소개하겠습니다.
위에서 GC 개념과 동작 원리에 대해 충분히 이해를 했다면, 실제 자바 코드로 GC 모니터링하는 방법에 대해 소개해 드리겠습니다.
Full GC 모니터링의 핵심은 두 가지인데요. Old Generation 영역을 관장하는 Garbage Collector을 찾아야 합니다. 그리고 찾은 Garbage Collector의 Collection 수의 증가를 감지해야 합니다. 실제 JAVA 환경에서 이 작업을 하기 위해서는 GarbageCollectorMXBeans를 사용할 수 있습니다.
와탭에서 이루어지는 GC 모니터링의 원리와 사용된 코드가 궁금하다면, 아래 링크를 통해 자세한 내용을 확인해 보실 수 있습니다.