JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Java/자바 학습

2. 메모리 - 3. 가비지 컬렉션 기본

lamarcK 2025. 5. 14. 12:31

자바의 가비지 컬렉션(Garbage Collection)


기본 이해

  • 개념: 자바의 자동 메모리 관리 시스템으로, 더 이상 사용되지 않는 객체를 자동으로 감지하고 제거하는 프로세스
  • 비유: 집안 정리와 비슷함. 더 이상 필요 없는 물건(미참조 객체)을 정기적으로 치우는 청소부
  • 작동방식:
    • Mark: 사용중인 객체 식별
    • Sweep: 미사용 객체 제거
    • Compact: 남은 메모리 조각 정리

핵심 구성요소

  • Young Generation
    • Eden Space
    • Survivor Space (S0, S1)
  • Old Generation
  • Metaspace (Java 8 이후)
  • GC 알고리즘
    • Serial GC
    • Parallel GC
    • CMS GC
    • G1 GC

존재 이유와 목적

  • 메모리 누수 방지
  • 개발자의 메모리 관리 부담 감소
  • 안정적인 장기 실행 보장
  • 자동화된 메모리 최적화

주의사항과 일반적 오류

  • 과도한 객체 생성
  • 메모리 누수 가능성 있는 코드 작성
    • static 컬렉션 무분별 사용
    • 리소스 미해제
  • GC 튜닝 오버엔지니어링

비교 분석

특성 수동 메모리 관리 GC
제어력 높음 낮음
개발 생산성 낮음 높음
버그 발생 가능성 높음 낮음
성능 최적화 가능 예측 어려움
학습 곡선 가파름 완만함

실무 활용

// 메모리 누수 가능성 있는 코드
public class MemoryLeakExample {
    private static final List<Object> list = new ArrayList<>();

    public void addObject(Object obj) {
        list.add(obj);  // static 리스트에 계속 추가
    }
}

// 개선된 코드
public class ImprovedExample {
    private final List<Object> list = new ArrayList<>();

    public void addObject(Object obj) {
        list.add(obj);
        // 필요없는 객체는 제거
        if (list.size() > MAX_SIZE) {
            list.remove(0);
        }
    }
}

이전 개념: 메모리 구조, JVM 아키텍처
후속 개념: GC 튜닝, JVM 튜닝, 성능 최적화

베스트 프랙티스:

  1. 불필요한 객체 생성 최소화
  2. try-with-resources 사용
  3. 적절한 GC 알고리즘 선택
  4. 메모리 사용량 모니터링
  5. 주기적인 성능 프로파일링