-
가비지 컬렉션(Garbage Collection)???Java 2018. 7. 12. 18:52반응형
자바 공부하면서, 앞에서도 메모리 구조 정리하면서 가비지, 가비지 이야기가 많은데,,
정확히 어떤 동작을 하는지, 어떤 것을 처리하는지 몰라서 찾아보았습니다.
1. 가비지 컬렉션 (Garbage Collection)?
- 가비지 컬렉터는 힙 메모리를 다룹니다.
- 가비지 컬렉터 (Garbage Collector) 는 힙 내의 Garbage를 찾아내고 처리해서 힙의 메모리를 회수한다.
- reachability라는 개념을 사용하여 객체의 유효한 참조가 있으면 reachability, unreachability로 Garbage를 판단한다.
New / Young Generation
Tenured Generation
Permanent Generation
Eden
Survivor 0
Old
Permanent
Survivor 1
1) Minor GC ( Young 영역에서 발생하는 GC(Garbage Collector) )
- 새로 생성된 객체는 Eden 영역에 위치한다.
- Eden 영역에 데이터가 어느 정도 쌓이면, Survivor 영역으로 옮겨지거나 삭제됩니다.
* Survivor 영역 사이에는 우선 순위가 있는 것은 아니나 두 개의 영역 중 한 영역은 반드시 비어 있어야 합니다.
- Eden영역과 Survivor 둘 중 하나의 영역이 꽉 찬다면 비어있는 Survivor영역으로 이동되고, Young영역에 공간이 남아있지 않으면, Old영역으로 이동한다.
* 스레드 로컬 할당 버퍼(Thread-Local Allocation Buffers) : 각 스레드별 메모리 버퍼를 사용하여 다른 스레드에 영향을 주지 않고 작업을 한다.
ⓛ Eden 내에 있는 한 영역
② Thread 마다 할당되는 객체 버퍼
③ 각 Thread 마다 Thread-Local에 할당되므로, 동기화에 신경쓰지 않아도 된다.
④ TLAB 밖에 할당된 객체들은 Thread 동기화 등여러가지 절차가 추가적으로 필요하기 때문에 처리하는데 느리다.
2) Major GC ( Old 영역이나 Permanent 영역에서 발생하는 GC(Garbage Collector) )
- Old 영역에서 참조되지 않은 객체들을 한꺼번에 삭제한다.
- Major GC가 발생하면 GC를 실행하는 Thread를 제외하고 나머지 Thread는 모두 작업을 멈추고, GC작업이 끝난 뒤 Thread가 다시 작업을 시작한다.
2. Gabage Collector 방식
1) Serial Collector
- Young영역과 Old영역이 Serial 하게 처리되며 하나의 CPU를 사용합니다.
- 일반적으로 클라이언트 종류의 장비에서 많이 사용됩니다.
2) Parallel Collector
- Young영역에서 Serial Collector 와 달리 병렬로 처리합니다.
3) Parallel Compacting Collector
- Old영역에서 Mark, Sweep, Compact 3단계로 GC를 거칩니다.
- CPU를 사용하는 서버에 적합합니다.
4) Concurrent Mark-Sweep Collector
- Old영역에서 Mark, Sweep, Remark, Concurrent Sweep 4단계로 GC를 거칩니다.
- 2개 이상의 프로세서를 사용하는 웹서버에 적합합니다.
반응형'Java' 카테고리의 다른 글
객체 지향2. 상속(Inheritance)은 무엇일까? (0) 2018.07.16 객체 지향1. 캡슐화(Encapsulation)은 무엇일까? (0) 2018.07.13 JVM 메모리 구조 (0) 2018.07.12 자바의 아버지는 누구인가? (0) 2018.07.11 Java 프로그래밍 언어 플랫폼(SE, EE, ME, FX) (0) 2018.07.11