반응형

GC(Garbage Collection)란 무엇인가?

애플리케이션 개발을 하다 보면 "메모리 관리"라는 단어를 종종 듣게 됩니다. 특히, Java와 같은 언어에서는 개발자가 직접 메모리를 관리하지 않아도, 프로그램 실행 중에 메모리를 자동으로 관리하는 GC(Garbage Collection) 기능이 제공됩니다. 그렇다면 GC는 정확히 무엇이고, 왜 중요한 것일까요? 이번 포스팅에서는 GC의 개념과 작동 원리, 그리고 실제로 모니터링하거나 최적화할 때 알아두면 좋은 정보들을 정리해 보았습니다.


GC란?

**GC(Garbage Collection)**은 더 이상 필요하지 않은 객체를 자동으로 제거하여 메모리를 해제하는 기능입니다. 쉽게 말해, 애플리케이션이 사용하지 않는 메모리를 탐지하고 이를 정리해주는 자동 청소기라고 할 수 있습니다.

GC는 수동으로 메모리를 관리해야 했던 과거 언어(C, C++ 등)와 달리, 메모리 누수(memory leak)와 같은 문제를 효과적으로 해결할 수 있도록 설계되었습니다. Java, Python, .NET 등 많은 언어가 GC를 지원합니다.


GC의 역할

GC는 다음과 같은 작업을 수행합니다:

  1. 불필요한 객체 제거
    • 프로그램에서 더 이상 참조되지 않는 객체를 찾아 메모리에서 제거합니다.
    • 예: "고객 A의 데이터를 사용하던 중 사용이 끝났다면, 해당 데이터를 삭제".
  2. 메모리 누수 방지
    • 프로세스에서 사용하지 않는 메모리를 해제하여 시스템 메모리 자원을 절약합니다.
  3. 메모리 재활용
    • 제거된 객체의 메모리 공간을 새 객체 생성 시 재사용할 수 있도록 반환합니다.

GC의 작동 원리

GC는 기본적으로 객체를 참조하는 경로를 분석하여 작동합니다. 더 이상 접근할 수 없는 객체를 "불필요한 객체"로 판단하고 이를 정리합니다. GC의 작동 과정은 크게 3단계로 나뉩니다:

  1. 객체 식별
    • 현재 사용 중인 객체와 그렇지 않은 객체를 식별합니다.
    • 참조가 없는 객체는 "고아 객체"로 간주됩니다.
  2. 객체 제거
    • 고아 객체를 메모리에서 제거하고, 관련 자원을 반환합니다.
  3. 메모리 압축 (선택적)
    • 메모리 단편화를 줄이기 위해 남은 데이터를 연속된 공간으로 이동시키는 과정입니다.

Java의 GC 구조

Java는 JVM(Java Virtual Machine)을 통해 GC를 실행하며, JVM은 메모리를 다음과 같은 구조로 나눕니다:

1. Young Generation

  • 새로 생성된 객체가 저장되는 영역.
  • 대부분의 객체는 이 영역에서 생성되고, 수명이 짧습니다.
  • Young Generation은 다시 Eden 영역Survivor 영역으로 나뉩니다.

2. Old Generation

  • Young Generation에서 오래 살아남은 객체가 이동되는 영역.
  • 오래된 객체, 즉 장시간 참조되는 객체가 저장됩니다.

3. Metaspace

  • 클래스 메타데이터가 저장되는 공간(Java 8 이후 도입).

Java GC 알고리즘 종류

Java에서는 다양한 GC 알고리즘이 제공되며, 애플리케이션의 요구사항에 따라 선택할 수 있습니다.

1. Serial GC

  • 단일 스레드로 작동하는 간단한 GC 방식.
  • 소규모 애플리케이션에 적합.

2. Parallel GC

  • 멀티스레드를 활용하여 GC 작업을 병렬로 처리.
  • 처리량(Throughput)이 중요한 애플리케이션에 적합.

3. CMS GC (Concurrent Mark-Sweep)

  • 애플리케이션 실행 중에도 GC 작업을 병렬로 수행.
  • 지연 시간(Latency)을 줄이는 데 적합.

4. G1 GC (Garbage-First)

  • 대용량 메모리를 효율적으로 관리하기 위해 설계.
  • Java 9 이후 기본 GC로 설정됨.

GC의 장단점

장점

  1. 자동 메모리 관리
    • 개발자가 메모리 해제를 직접 관리하지 않아도 됩니다.
  2. 안정성
    • 메모리 누수와 같은 오류를 줄이고, 안정적으로 메모리를 관리합니다.
  3. 생산성 향상
    • 개발자는 비즈니스 로직에 더 집중할 수 있습니다.

단점

  1. 퍼포먼스 문제
    • GC 실행 중에는 프로그램이 멈추는 "Stop-the-World" 현상이 발생할 수 있습니다.
    • 대규모 애플리케이션에서는 GC가 성능 병목이 될 가능성이 있습니다.
  2. 예측 불가능성
    • GC 실행 시점을 정확히 예측하기 어렵습니다.

GC 최적화 팁

1. GC 유형 선택

애플리케이션의 요구사항에 맞는 GC 알고리즘을 선택합니다.

2. JVM 옵션 활용

  • 예시:
-Xmx4G -Xms4G -XX:MaxGCPauseMillis=200

 

  • 최대 힙 메모리와 최소 힙 메모리를 설정해 성능을 조정합니다.

3. GC 로그 분석

  • GC 로그(-XX:+PrintGCDetails)를 활성화하여 성능 병목 현상을 분석합니다.

4. 모니터링 도구 활용

  • Prometheus와 Grafana로 GC 메트릭을 시각화하여 성능 문제를 조기에 발견합니다.

마무리

GC는 개발자에게 메모리 관리의 부담을 줄여주는 강력한 도구입니다. 하지만 자동화된 만큼 그 작동 원리를 이해하고, 성능을 모니터링하여 최적화하는 것이 중요합니다. 특히 대규모 애플리케이션에서는 적절한 GC 알고리즘 선택과 튜닝이 핵심입니다.

반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] 상속, 오버로딩, 오버라이딩  (1) 2025.01.03
[Java] static  (0) 2025.01.03
[Java] 패키지 & 접근 제어자  (0) 2025.01.03
[Java] 생성자  (0) 2025.01.03
[Java] Class & Object (클래스 & 객체)  (0) 2025.01.03
반응형

운영체제

  • 운영체제(OS): 프로그램들을 실행하는 메인 프로그램
    • 프로그램들을 실행시키기 위해서는 하드웨어의 자원이 필요 -> 운영체제는 하드웨어의 자원들을 이용해 응용 프로그램을 관리
    • 이 외에도 운영체제는 네트워크 통신, 입출력 장치 관리 등 우리가 컴퓨터 사용에 필요한 모든 것을 관리
  • 운영체제(OS) 종류는 대표적으로 Window OS, Mac OS, Linux OS 등이 존재
    • 전세계에서 가장 많이 쓰이는 OS는 Linux로 거의 모든 IT 회사에서 사용하는 서버는 Linux OS를 기반으로 동작
    • Linux OS 기반 운영체제는 Android OS, Ubuntu OS, Cent OS 등이 있음
  • 커널: 하드웨어의 자원을 이용해 프로그램을 관리하는 역할
    • 운영체제의 내부 구성요소 중 하나 
    • 보통 운영체제를 만들 때 커널을 기본으로 해서 그 위에 다른 것들이 올라가게 됨

 

하드웨어

CPU

  • 컴퓨터 시스템을 통제하고 프로그램에서 돌아가는 모든 계산을 함
    • 모든 프로그램들이 실행된다는 건 CPU가 일을 하고 있다고 생각하면 됨

 

메모리

  • 전기적인 신호를 내부에서 임시적으로 저장하는 역할
  • 메모리의 대표적인 역할
    • CPU의 계산 결과 저장
      • CPU가 계산을 하면서 나오는 결과들을 메모리에 임시적으로 저장하고 이를 다시 CPU가 사용하는 방식
    • 프로그램이 실행되는 공간 제공
      • 프로그램이 실행되면 프로세스의 형태로 메모리 위에 올라가고, 프로그램이 종료되면 메모리에서 사라짐
  • 메모리의 용량이 크다는 건 많은 정보들을 처리할 수 있으며, 더 많은 프로그램을 띄울 수 있다는 걸 의미

 

디스크

  • 정보를 영구적으로 저장하는 역할
  • 메모리가 프로그램이 실행되는 과정을 책임진다면, 디스크는 프로그램을 컴퓨터에 저장하는 과정을 책임짐

 

Reference

https://www.inflearn.com/course/it-%EA%B0%9C%EB%B0%9C%EC%A7%80%EC%8B%9D#

 

IT 회사에서 비개발자가 살아남기 위한 모든 개발 지식 A to Z - 인프런 | 강의

본 강의는 멤버십 구독 개념으로 한 번 구매하면 계속 추가되는 수업도 수강할 수 있습니다😃, [사진] 이 강의는!  단순히 개발 용어만을 알려주지 않습니다.IT 회사에서 개발자들이 실제로 하

www.inflearn.com

https://www.grabbing.me/IT-A-to-Z-By-1e1fbc981b7c4c03ac44943085ac8304

 

[IT 개발자와 일할 때 필요한 모든 개발지식] A to Z 자료 모음집 By 그랩

장담하건대 이 내용들만 알고 계시면 IT 개발의 전체적인 흐름은 전부 파악한다고 보셔도 무방합니다.

www.grabbing.me

 

반응형

'비개발자의 개발 지식 스터디 > 개발 배경지식' 카테고리의 다른 글

API  (0) 2023.07.12
라이브러리 & 프레임워크  (0) 2023.07.12
네트워크  (0) 2023.07.12
Git & Github  (0) 2023.07.12
프로그램 & 프로그래밍 언어  (0) 2023.07.11

+ Recent posts