Skip to content

Commit

Permalink
기본이 중요하다
Browse files Browse the repository at this point in the history
  • Loading branch information
K-Diger committed Oct 23, 2023
1 parent 6e24f5a commit 624b955
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions _posts/2023-09-30-Revenge.md
Original file line number Diff line number Diff line change
Expand Up @@ -1377,6 +1377,10 @@ B가 담겨있는 트리에 A 라는 메서드를 병합하는 것이다.

참조되지 않은 객체를 정리해준다.

[Oracle UnderStanding GC](https://blogs.oracle.com/javamagazine/post/understanding-garbage-collectors)

[Oracle GC Tuning Document](https://docs.oracle.com/en/java/javase/17/gctuning/garbage-first-garbage-collector-tuning.html)

### Garbage Collector란?

Java 프로그램에서, 자동으로 메모리를 관리해주는 과정이다.
Expand Down Expand Up @@ -1413,7 +1417,7 @@ Garbage Collector 은 JVM 이 구현한다.

#### JVM 힙 영역의 구분

![](https://www.programmersought.com/images/220/8462f4bfba5f173585f6f8cd2dce12ac.JPEG)
![](https://i0.wp.com/thinkground.studio/wp-content/uploads/2020/09/200923_heap-area.png?w=2000&ssl=1)

##### Young Generation

Expand Down Expand Up @@ -1722,29 +1726,29 @@ Major Collcetion이 자주 발생할 수 있다. 따라서 최적의 선택을

### GC종류

#### GC - Serial Collector (JDK 1)
#### GC - Serial Collector (첫 등장 - JDK 1)

Serial Collector는 단일 스레드를 사용하여 모든 가비지 수집 작업을 수행하여 스레드 간 통신 오버헤드가 없기 때문에 상대적으로 효율적이다.

다중 프로세서 하드웨어를 활용할 수 없기 때문에 단일 프로세서 시스템에 가장 적합하며 특정 하드웨어 및 운영 체제 구성에서 기본적으로 선택되거나 `-XX:+UseSerialGC`옵션을 사용하여 명시적으로 활성화할 수 있다.

---

#### GC - Parallel Collector (JDK 6)
#### GC - Parallel Collector (첫 등장 - JDK 6)

Parallel Collector는 Throughput Collector 라고도 하며 Serial Collctor와 유사하다.

Serial Collector와 Parallel Collector의 주요 차이점은 Parallel Collector에는 가비지 수집 속도를 높이는 데 사용되는 여러 스레드가 있다는 것이다.

Parallel Collector는 다중 프로세서 또는 다중 스레드 하드웨어에서 실행되는 중대형 데이터 세트가 있는 애플리케이션을 위한 것으로 `-XX:+UseParallelGC.`옵션을 사용하여 활성화할 수 있다.

병렬 압축은 Parallel Collector가 Major Collection을 병렬로 수행할 수 있도록 하는 기능이다. 병렬 압축이 없으면 Major Collection이 단일 스레드를 사용하여 수행되므로 확장성이 크게 제한될 수 있다.
Parallel Collector에서 사용되는 병렬 압축은 Parallel Collector가 Major Collection을 병렬로 수행할 수 있도록 하는 기능이다. 병렬 압축이 없으면 Major Collection이 단일 스레드를 사용하여 수행되므로 확장성이 크게 제한될 수 있다.

`-XX:+UseParallelGC`지정된 경우 병렬 압축이 기본적으로 활성화되고 `-XX:-UseParallelOldGC`옵션을 사용하여 병렬 압축을 비활성화할 수 있다.

---

#### GC - Garbage-First (G1) Garbage Collector (JDK 7)
#### GC - Garbage-First (G1) Garbage Collector (첫 등장 - JDK 7, LTS JDK 11)

G1은 동시 수집기이다. 동시 수집기는 애플리케이션에 대해 비용이 많이 드는 일부 작업을 동시에 수행한다. 이로 인해 높은 처리량을 달성할 수 있다.

Expand All @@ -1760,9 +1764,9 @@ G1은 대부분의 하드웨어 및 운영 체제 구성에서 기본적으로

우선적으로 Young Region에만 적용되는 단계가 적용된다. Old Generation의 점유율이 임계값을 넘어갈 때 수행되는데 이 임계값은 `Initiating Heap Occupancy`이라고 한다.

1. `Concurrent Start(Marking)` (Stop The World가 발생한다.)
- Old Region에서 도달 가능한 모든 객체를 수집 단계에서 유지할 것인지에 대해 결정한다.
- Heap 메모리를 전체적으로 스캔하면서 Unrechable 객체의 영역을 확인한다.
1. `Concurrent Start(Marking)`
- Young GC가 발생한다.
- Old Region에서 도달 가능한 모든 객체를 수집한다. (Marking)

2. `Remark` (Stop The World가 발생한다.)
- 마킹을 마무리하고, 회수 대상에서 글로벌 참조를 반영하고, 클래스를 Unloading함으로써 남게된 비어있는 영역을 회수한다. (Once Time Mixed GC)
Expand All @@ -1779,7 +1783,7 @@ G1 GC는 기존의 GC와 달리 Young Generation -> Old Generation으로 거쳐

---

#### GC - ZGC (JDK 11)
#### GC - ZGC (첫 등장 - JDK 11, LTS JDK 17)

ZGC(Z Garbage Collector)는 Stop-The-World가 가장 짧은 확장 가능한 Garbage Collector다.

Expand Down

0 comments on commit 624b955

Please sign in to comment.