Collector 종류
-
serial collector
싱글 스레드에서 동작하는 GC
parallel collector, 병렬 수집기
- 장점
- 처리율에 최적화
- 가용 CPU 코어를 총동원해 가능한 한 재빨리 메모리를 mark/sweep
- STW 중단 시간을 조금이라도 단축해 가비지를 효율적으로 수집하겠다는 의도
- 단점
- 영 GC, 풀 GC 모두 풀 STW 를 일으킨다.
- 영역 내 살아 있는 객체 수만큼 마킹 시간도 늘어난다.
- STW 시간이 힙 크기에 거의 비례한다. → 힙이 계속 커질수록 STW 시간도 길어진다.
- 종류
- Parallel GC
- 영 세대용 병렬 수집기
- Young GC 언제 발생?
- 스레드가 에덴에 객체를 할당하려는데 TLAB 공간이 부족하고, JVM 도 새로운 TLAB 를 할당할 수 없을 때 발생한다.
- TLAB 가 없다는 것은 다른 스레드도 같은 상황이 발생한다는 것이기에 STW 발동
- Parallel Old GC
- 올드 세대용 병렬 수집기
- Parallel GC 와 차이점 : 반구형 수집기가 아닌 하나의 연속된 메모리 공간에서 압착하는 수집기
- 동작 : Old 세대 영역에 더 이상 공간이 없으면 올드 세대 내부에서 객체들을 재배치해서
늙은 객체가 죽고 빠져 버려진 공간을 회수한다.
- 장점
- 메모리 사용 면에서 아주 효율적, 메모리 단편화 방지
concurrent collector
- 목적 : STW 는 언제 발생하는지 예측할 수 없다. 최신 GC 이론은 불확정적 STW 중단 문제를 해결하고자 한다.
- 종류
- CMS
- 중단 시간을 아주 짧게 하려고 설계된, 올드 영역 전용 수집기다.
- 어플리케이션 스레드와 GC 스레드가 동시에 동작한다.
- STW 는 mark/re-mark 시에만 발생한다. → 한 차례 긴 STW 중단을 매우 짧은 두 차례 STW 로 대체한 셈이다.
- 초기 마킹의 목적
- 해당 영역 내부에 위치한 확실한 GC 출발점을 얻는 것이다.
- 동시 마킹 목적
- 재마킹 단계에서 가능한 한 STW 시간을 줄이는 것
- 단점
- compaction 을 하지 않으므로 올드 영역이 단편화될 수 있다.
- GC 수행에 훨씬 더 많은 CPU 시간이 필요하다. → ?
- GC가 객체를 추적해야 하므로 메모리를 더 쓴다 → ?
- 작동 원리
- 가용 스레드 절반을 동원해 GC 동시 단계를 수행하고, 나머지 절반은 자바 코드를 실행한다.
- CMS 도중에 에덴 공간이 꽉 찬다면?
- CMS 도중 영 GC 가 일어난다.
- 영GC 는 코어 절반만 사용하므로 병렬 수집기의 영GC 보다 더 오래걸린다.
- concurrent mode failure, 동시 모드 실패 : 할당률이 급증하면 영 수집 시 조기 승격이 일어난다. → 올드 영역 공간도 부족해 진다.
- CMF 를 방지하려면 테뉴어드가 꽉 차기 전에 CMS가 수집 사이클을 개시해야한다.
G1
- 목적
- 세대 개념을 다른 관점에서 다시 생각해 설계한 수집기
- 주목표는 중단 시간 단축
- 특징
- 세대 마다 경계가 뚜렷하지 않고, 연속된 메모리 공간이 없다.
- GC 시 전체 영역을 탐색하지 않는다.
- 힙 레이아웃 및 영역
- 힙 영역은 Region 으로 구성된다.
- Region 을 이용하면 세대를 불연속적으로 배치할 수 있고,
수집기가 매번 실행될 때마다 전체 가비지를 수집할 필요가 없다.
- 장점
-
CMS 보다 훨씬 튜닝하기 쉽다.
-
조기 승격에 덜 취약하다.
-
대용량 힙에서 중단 시간이 우수하다.
-
STW 시간이 짧다.
-
Compaction 을 사용한다.
용어 정리
Write Barrier
Write Barrier는 파일시스템의 메타데이터가 올바르게 기록되고 디스크에 제대로(심지어 디스크 전원이 나갈지라도) 반영되게 하기위한 커널 매커니즘
Manifest File
jar 파일의 메타데이터를 갖고있는 파일이다. key, value 쌍으로 정보를 명시한다.
- Manifest-Version, Created-By, Multi-Release, Built-By
- Entry Point and Classpath
메모리 릭
컴퓨터가 필요하지 않은 메모리를 계속 점유하면서 더 이상 사용 가능한 메모리가 없어지는 현상
메모리 단편화
메모리 공간이 작은 조각 공간으로 나뉘게 될 경우, 사용 가능한 메모리가 충분함에도 불구하고 메모리 할당이 불가능한 상태
오버헤드
어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리
예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데,
안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면,
오버헤드는 5초가 된다.
또한 이 처리 B를 개선해 B'라는 처리를 한 결과,
처리시간이 12초가 되었다면, 이 경우 오버헤드가 3초 단축되었다고 말한다>
트랜잭션
- 작업의 완전성 보장
- 데이터의 정합성 보장
- 논리적인 작업 셋을 모두 완벽하게 처리하고나, 실패하면 모두 원 상태로 복구해서 부분 성공이나 부분 실패를 방지하는 기능
잠금
- 동시성 제어하기 위한 기능
- 하나의 레코드에 동시에 여러 트랜잭션이 접근할 때 제어 기능을 제공한다.