반응형

unreachable object

  • 누구도 참조하지 않는 객체
  • GC에 의해 제거 대상이 됨

Garbage Collection 과정

  • Marking
    • 메모리에서 참조되는 객체(live object)와 참조되지 않는 객체(unreachable object)를 구분하여 마킹하는 절차를 수행
  • Deletion
    • unreachable object를 삭제
  • Compacting
    • 메모리를 효율적으로 쓸 수 있도록 데이터를 정리 및 압축

Garbage Collection 용어

  • Young Generation
    • new 키워드로 오브젝트를 생성한 경우 최초로 저장되는 공간
    • 대부분의 객체가 금방 접근 불가상태가 되기 때문에 해당 영역에서 관리됨
    • eden + survivor spaces
  • Old Generation
    • Young Generation에서 오래도록 참조되는 객체가 넘어와 저장되는 영역
  • Permanent Generation
    • 클래스의 메타 데이터를 저장하는 공간
    • Java8부터 heap memory가 아닌 native memory로 관리됨
  • MinorGC
    • Young Generation에서 발생하는 GC
    • unreachable object는 삭제, surviving object는 Old Generetion 영역으로 이동
    • Major GC보다 상대적으로 빠름
  • MajorGC
    • Old Generation에서 발생하는 GC
    • Minor GC보다 상대적으로 느림
  • Full GC
    • Heap memory 전체를 clear하는 GC
  • Stop the world event
    • GC 수행시 모든 application thread가 중지되는 현상

GC 종류

  • Serial GC
    • 단일 스레드로 MinorGC, MajorGC 모두 순차적으로 수행하는 GC
    • Deletion + Compacting을 수행
    -XX:+UseSerialGC
    
  • Parallel GC
    • 멀티 스레드로 GC를 수행
    • default로 young generation에서만 멀티 스레드를 활용
    • 옵션을 통해 old generation에서도 멀티 스레드 허용 가능
    • Deletion + Compacting을 수행
    -XX:+UseParallelGC
    
  • CMS(Concurrent Mark Sweep) GC
    • GC 작업을 애플리케이션 스레드와 동시에 수행
    • stop the world 시간 최소화
    • Compacting을 수행하지 않아 memory를 많이 차지함
    -XX:+UseConcMarkSweepGC
    
  • G1 GC
    • 여러 CPU와 아주 큰 memory에서 효과적으로 GC 수행
    • java7부터 사용 가능, java9에서 default GC
    -XX:+UseG1GC
    
반응형

'Development > Java' 카테고리의 다른 글

[Java] Json Handling(with Jackson)  (0) 2019.03.20
[Java] HTML 파싱  (0) 2019.03.20
[Java] JDK 설치  (0) 2018.07.22
[Java] logback, slf4j  (0) 2018.07.15
[Java] log4j  (0) 2018.07.15

+ Recent posts