SSARTEL-10th / JPTS_bookstudy

"개발자가 반드시 알아야 할 자바 성능 튜닝 이야기" 완전 정복
7 stars 0 forks source link

G1 GC 지금은 어떤가? #17

Open kgh2120 opened 9 months ago

kgh2120 commented 9 months ago

👍 문제

G1 GC는 과정이 복잡한 만큼 성능이 제일 좋다고 합니다. 하지만 책의 집필 시점에서는 안정성 문제로 작가는 적용하지 않았다고 하는데요, 책이 작성된지 벌써 10년이 지난 만큼, 지금은 G1 GC에 대한 안정성 문제가 해결되었는지 궁금합니다. 그리고 여유가 된다면 어떤이유로 안정성 문제가 발생했는지에 대해서 알아봐주세요.

✈️ 선정 배경

지금은 쓰겠지... 싶어서 올려봤습니다. 좋다는데 안쓰면 아쉽잖아요.

📺 관련 챕터 및 레퍼런스

story 17. 도대체 GC는 언제 발생할까?

🐳 비고

olrlobt commented 9 months ago

G1 GC



GC의 종류

...



왜 이름이 G1일까?

G1 GC의 G1은 (Garbage-First) 의 약자로, 가장 많은 가비지가 있는 영역부터 수집하는 핵심 전략을 갖고 있다.

이렇게 하면 가장 효율적으로 메모리를 재활용할 수 있으며, 주어진 일시 중지 시간(pause time) 목표 내에서 가능한 한 최대의 메모리를 회수하는 것이 가능해진다.



G1은 어떤 안정성 문제가 있었을까?

G1은 Java 7에서 처음으로 사용 가능하게 되었는데, 당시에 더 오래 된 Parallel GC나 CMS GC 와 같은 GC들에 비해 완전히 검증되지 않았다.

초기 버전의 G1 GC는 일부 케이스에서 예상치 못한 행동이나 성능 문제를 일으킬 수 있었다.

어떤 케이스 였을까 ?

  1. G1 GC의 주요 목표 중 하나는 일시 중지 시간을 줄이는 것이지만, 초기 버전에서는 일부 상황에서 예상보다 긴 일시 중지 시간이 발생했다.
  2. G1은 메모리 조각화 문제를 해결하기 위해 설계되었지만, 초기 버전에서는 여전히 일부 상황에서 조각화 문제가 발생했다.
  3. 일부 애플리케이션에서는 G1 GC를 사용할 때 전반적인 성능 저하가 발생했으며, 이는 CMS GC나 Parallel GC와 비교했을 때 특히 두드러졌다.

이러한 문제점들은 시간이 지나면서 Java 업데이트와 함께 개선되었고, G1 GC는 현재 많은 환경에서 안정적으로 사용되고 있다.



G1은 어떻게 기본 GC가 될 수 있었을까?

G1이 기본 GC로 채택된 것에는 여러가지 중요 요인들이 있다.

  1. 예측 가능한 일시 중지 시간: \ G1 GC는 일시 중지 시간 목표 (예: -XX:MaxGCPauseMillis)를 설정할 수 있게 설계되었다. 이를 통해 개발자들은 일시 중지 시간을 예측 가능한 범위로 제한할 수 있다. 이러한 특징은 실시간성을 요구하는 애플리케이션에서 특히 중요하다.

  2. 대규모 힙 지원

  3. CMS GC의 한계점: \ 메모리 조각화와 전체 GC로 인한 긴 일시 중지 시간 문제 등의 한계점을 해결하기 위해 G1 이 등장했다.

  4. 현대 애플리케이션의 요구 사항 : \ 대규모 메모리, 실시간 요구 사항 및 효율성을 중시하는 현대 애플리케이션의 요구 사항을 충족시키기 위해 G1 GC가 적합하다고 판단된다.



Ref. \

  1. https://steady-coding.tistory.com/590