5. Heap이란?
1. JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임시 동적으로
할당하여 사용되는 공간이다.
2. JAVA에서 new 키워드를 사용하여 만든 인스턴스는 모두 이곳에 저장된다.
3. 이 영역에서 생성된 객체와 배열은 Stack 영역의 인스턴스나 다른 객체의 필드
에서 참조한다.
4. 참조하는 변수나 필드가 없다면 의미 없는 객체가 되어 GC 대상이 된다.
11. Garbage Collector 란?
1. 대부분의 객체는 금방 접근 불가능한 상태가 된다.
2. 오래된 객체에서 새로운 객체에 대한 참조는 아주 적게 존재 한다.
가비지 컬렉터는 아래의 2가지의 가설에 의해 만들어졌습니다.
이러한 가설을 weak generation hypothesis라 합니다.
15. Stop-the-world 란?
1. 가비지 컬렉터(Garbage collector)를 실행하기 위해 JVM의 어플리케이션이 잠
시 멈추는 것을 말합니다.
2. 대개 가비지 컬렉터(Garbage collector) 튜닝은 Stop-the-world의 시간을 줄이
는 것을 의미합니다.
16. Java 에서는 개발자가 명시적으로 메모리를 해제 하지 않아 가비지 컬렉터가 더 이
상 사용되지 않는 쓰레기(Object)를 찾아 회수하는 역활을 합니다.
Garbage Collector 란?
17. Garbage Collector 란?
현재 JVM(Hotspot VM)에서는 이러한 가설의 장점을 살리기 위해 크게 2가지의 물
리적 공간을 나눠서 사용합니다.
YOUNG OLD
22. Old 영역이란?
Young
Old
오래된 객체
오래된 객체
새로운 객체
새로운 객체
오래된 객체 오래된 객체
새로운 객체
새로운 객체
새로운 객체
새로운 객체
새로운 객체
오래된 객체 오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
새로운 객체
새로운 객체
새로운 객체
새로운 객체
새로운 객체
새로운 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
23. Old 영역이란?
Old
오래된 객체 오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
Full GC
24. Old 영역이란?
Old
오래된 객체 오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
오래된 객체
35. 왜 Young 영역에서는 한곳으로 데이터를 몰아넣는가?
Young 영역에서 Compaction(정렬)을 하기에는 성능적으로 문제가 발생한다.
그래서 따로 메모리 단편화에 대한 대처를 하지 않기 위해 살아남은 객체들만
Survivor 영역 중 한곳(비어있는곳)으로 몰아넣는 이유이다.
36. Old 영역 구성
● Old 영역에서는 기본적으로 데이터가 가득차면 GC가 실행된다.
● GC방식에 따라 처리방식이 달라집니다. GC 방식은 아래와 같습니다.
○ Young GC & Old GC
■ Serial GC
■ Parallel GC
■ Parallel Old GC
■ Concurrent Mark & Sweep GC
○ Other GC
■ G1(Garbage first) GC
37. Serial GC란?
Old 영역의 Serial GC는 Mark - Sweep - compact라는 알고리즘을 사용합니다.
Old
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
객체
Mark
Sweep
38. Serial GC란?
Old 영역의 Serial GC는 Mark - Sweep - compact라는 알고리즘을 사용합니다.
Old
객체
객체
객체
객체
객체
객체
객체
객체
Mark
Sweep
Compact
40. Parallel GC와 Parallel Old GC 란?
Young 영역을 Multi Thread 처리, 즉 Old 영역은 Single Thread로 처리 한다.
Young 영역과 Old 영역 둘다 Multi Thread 처리
Parallel GC
Parallel Old GC
41. Serial GC와 Parallel GC 차이
1. 적은 메모리와 단일 코어
2. 서버 운용으론 불가
3. 비교적 긴 Stop-the-world의 시간
1. Serial GC 보단 빠름
2. 많은 메모리와 코어 개수가 많을 때 유리
55. G1 GC란? – Young 한 활동
Edan Space
Survivor Space
Old Generation
EMPTY
EMPTY EMPTY
56. G1 GC란? – Young 한 활동
GC &
Empty
GC &
Empty
GC &
Empty
GC &
Empty
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
57. G1 GC란? – Young 한 활동
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
58. G1 GC란? – Young 한 활동
GC &
EMPTY
GC &
EMPTY
GC &
EMPTY
GC &
EMPTY
EMPTY
EMPTYEMPTY
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
59. G1 GC란? – Young 한 활동
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
60. G1 GC란? – Young 한 활동
GC &
EMPTY
GC &
EMPTY
GC &
EMPTY
GC &
EMPTY
EMPTY
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
61. G1 GC란? – Initial Mark
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
EMPTY EMPTY
62. G1 GC란? – Root Region Scanning
Edan Space
Survivor Space
Old Generation
EMPTY
EMPTY EMPTY
63. G1 GC란? – Concurrent Marking
EMPTY EMPTY
Edan Space
Survivor Space
Old Generation
EMPTY
64. G1 GC란? – Remark
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
65. G1 GC란? – Copying & Cleanup
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
66. G1 GC란? – After Copying & Cleanup
Edan Space
Survivor Space
Old Generation
STW 발생
EMPTY
67. G1(Garbage First) GC는?
G1 GC는 장기적으로 문제가 많은 CMS GC를 대체하기 위해 만들어 졌다.
G1 GC의 가장큰 장점은 성능이다. 지금 까지의 어떤 GC보다 가장 빠르다!!