[java] 가비지 콜렉션의 종류(GC: Garbage Collection)

2019. 7. 24. 14:21·java

GC의 종류에 대해서 알아보겠습니다.

SerialGC

  • 싱글 스레드로 Young 영역, Old 영역을 처리
  • 하나의 스레드를 이용해서 동작하기 때문에 멀티 스레드 환경의 서버 프로그램에서는 부적합
  • 일시 중지에 관대한 클라이언트 프로그램이나 테스트용 프로그램에 적합
  • java -XX:+UseSerialGC
  • Mark-Sweep-Compact 알고리즘을 이용
    • Mark: 살아 있는 객체를 선택
    • Sweep: 선택되지 않은 객체를 정리
    • Compact: 메모리 공간을 압축

ParallelGC

  • Minor GC를 여러개의 스레드를 이용하여 동시에 처리
    • Major GC는 싱글 스레드로 처리
  • SerialGC보다 빠르지만 더 많은 자원을 소모
  • Mark-Sweep-Compact 알고리즘을 이용
  • java -XX:+UseParallelGC

serial_vs_parallel

Parallel Old GC

  • Minor GC, Major GC를 모두 여러개의 스레드를 이용하여 동시에 처리
  • Mark-Summary-Compaction 알고리즘을 이용
    • Mark-Summary-Compaction 단계를 수행
    • Summary 단계에서 메모리를 인덱싱하는 작업을 수행
      • Sweep은 싱글 스레드로 처리되고, Summary는 멀티 스레드로 처리하면서 이전 컴팩션정보를 함께 이용
  • java -XX:+UseParallelOldGC

CMS(Concurrent Mark & Sweep) GC

  • SerialGC, ParallelGC와 다른 알고리즘을 이용하여 작업이 멈추는 시간을 줄임
  • Stop-The-World 시간이 짧지만, 다른 GC에 비해 많은 메모리와 CPU를 사용
  • Compaction 단계가 기본적으로 제공되지 않아서 메모리 파편화가 발생할 수 있음
  • java -XX:+UseConcMarkSweepGC
  • 동작 방식
    1. Root Set에 의해 직접 참조되는 객체들을 선택(initial mark)
      • Root Set: 현재 참조중인 객체를 판단하기 위한 메모리 주소 모음
    2. 애플리케이션 동작 중 살아있는 객체 식별 (concurrent mark)
    3. 2번에서 새로 추가로 참조가 끊긴 객체를 확인 (remark)
    4. 참조가 끊긴 모든 객체를 정리 (concurrent sweep)

cms

G1GC

  • 메모리를 블록단위의 region으로 나누어서 데이터를 할당
    • Young, Old 영역이 없음
    • 블록을 사용 목적으로 구분하여 데이터를 할당하고, 해당 블록만 GC를 실행
  • -XX:UseG1GC

g1gc

공통

  • GC로그를 출력하기 위해서는 다음의 옵션을 입력
    • java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps

 

java memory management & gc from exsuns

 

참고

  • Java Garbage Collection
  • Java Reference와 GC
  • Memory Management in the JavaHotSpot™ Virtual Machine
  • JVM Garbage Collectors
반응형
저작자표시 비영리 동일조건 (새창열림)

'java' 카테고리의 다른 글

[log4j] 레이아웃 패턴 기본 설정  (2) 2019.11.04
[openjdk] open jdk 1.8 다운로드 및 설치  (0) 2019.10.25
[java] JVM이란?  (0) 2019.07.08
[java] 메모리 누수와 힙 덤프 분석  (0) 2019.06.05
[java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링  (0) 2019.06.04
'java' 카테고리의 다른 글
  • [log4j] 레이아웃 패턴 기본 설정
  • [openjdk] open jdk 1.8 다운로드 및 설치
  • [java] JVM이란?
  • [java] 메모리 누수와 힙 덤프 분석
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    oozie
    다이나믹
    하둡
    HDFS
    오류
    S3
    Tez
    airflow
    yarn
    bash
    Python
    error
    ubuntu
    hbase
    알고리즘
    SPARK
    HIVE
    k8s
    파이썬
    정올
    Linux
    하이브
    nodejs
    java
    mysql
    백준
    Hadoop
    build
    AWS
    emr
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[java] 가비지 콜렉션의 종류(GC: Garbage Collection)
상단으로

티스토리툴바