반응형
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 |