Skip to content

Latest commit

Β 

History

History
179 lines (117 loc) Β· 10.6 KB

GarbageCollection.md

File metadata and controls

179 lines (117 loc) Β· 10.6 KB

가바지 μ»¬λ ‰μ…˜(Garbage Collection)

written by sohyeon, hyemin πŸ’‘


1. GC(Garbage Collection)

1-1. 가비지 μ»¬λ ‰μ…˜ μ΄λž€?

μ•žμ„  JVMμ„€λͺ…μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ GCλŠ” 동적 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ˜μ—­(heap) μ€‘μ—μ„œ 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ˜μ—­μ„ νƒμ§€ν•˜μ—¬ μžλ™μœΌλ‘œ ν•΄μ§€ν•˜λŠ” 기법이닀.

Javaμ—μ„œλŠ” κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž¨ μ½”λ“œλ‘œ λ©”λͺ¨λ¦¬λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν•΄μ œν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 가비지 컬렉터(Garbage Collector)κ°€ 더 이상 ν•„μš” μ—†λŠ” 객체(μ“°λ ˆκΈ°)λ₯Ό μ°Ύμ•„ μ§€μš°λŠ” μž‘μ—…μ„ ν•œλ‹€.

1-2. GC λ™μž‘ 원리

GC μž‘μ—…μ„ ν•˜λŠ” 가비지 μ½œλ ‰ν„°(Garbage Collector)λŠ” λ‹€μŒμ˜ 역할을 ν•œλ‹€.

  1. λ©”λͺ¨λ¦¬ ν• λ‹Ή

  2. μ‚¬μš© 쀑인 λ©”λͺ¨λ¦¬ 인식

  3. μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬μΈμ‹

GCλ₯Ό 해도 더이상 μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ μ—†λŠ”λ° 계속 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜λ €κ³  ν•˜λ©΄,
OutOfMemoryErrorκ°€ λ°œμƒν•˜μ—¬ WASκ°€ λ‹€μš΄λ  μˆ˜λ„ μžˆλ‹€. ν–‰(Hang) 즉, μ„œλ²„κ°€ μš”μ²­μ„ 처리 λͺ»ν•˜κ³  μžˆλŠ” μƒνƒœκ°€ λœλ‹€.

JVM의 λ©”λͺ¨λ¦¬λŠ” 크게 클래슀 μ˜μ—­, μžλ°” μŠ€νƒ, νž™, λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œ μŠ€νƒμ˜ 4개 μ˜μ—­μœΌλ‘œ λ‚˜λ‰˜λŠ”λ°
가비지 μ½œλ ‰ν„°μ—μ„œλŠ” νž™ λ©”λͺ¨λ¦¬λ₯Ό λ‹€λ£¨κ²Œ λœλ‹€.
즉, μžλ°”μ½œλ ‰ν„°κ°€ μΈμ‹ν•˜κ³  ν• λ‹Ήν•˜λŠ” μžλ°” λ©”λͺ¨λ¦¬ μ˜μ—­μ€ νž™ μ˜μ—­μΈ 것이닀.

2. 가비지 컬렉터(Garbage Collector)

2-1. μ „μ œ 쑰건

가비지 μ»¬λ ‰ν„°λŠ” 두 가지 μ „μ œ 쑰건 μ•„λž˜μ—μ„œ λ§Œλ“€μ–΄ μ‘Œλ‹€.

  • λŒ€λΆ€λΆ„μ˜ κ°μ²΄λŠ” 금방 μ ‘κ·Ό λΆˆκ°€λŠ₯ μƒνƒœ(unreachable)κ°€ λœλ‹€.
  • 였래된 κ°μ²΄μ—μ„œ μ Šμ€ 객체둜의 μ°Έμ‘°λŠ” μ•„μ£Ό 적게 μ‘΄μž¬ν•œλ‹€.

μ΄λŸ¬ν•œ μ „μ œμ‘°κ±΄(κ°€μ„€)을 'weak generational hypothesis'라 ν•œλ‹€.
이 κ°€μ„€μ˜ μž₯점을 μ΅œλŒ€ν•œ 살리기 μœ„ν•΄μ„œ HotSpot VMμ—μ„œλŠ” Young μ˜μ—­κ³Ό Old μ˜μ—­μœΌλ‘œ 물리적인 곡간을 λ‚˜λˆ„μ—ˆλ‹€.

  • Young μ˜μ—­(Yong Generation μ˜μ—­)
    μƒˆλ‘­κ²Œ μƒμ„±ν•œ 객체의 λŒ€λΆ€λΆ„μ΄ 여기에 μœ„μΉ˜ν•œλ‹€. λŒ€λΆ€λΆ„μ˜ 객체가 금방 μ ‘κ·Ό λΆˆκ°€λŠ₯ μƒνƒœκ°€ 되기 λ•Œλ¬Έμ— 맀우 λ§Žμ€ 객체가 Young μ˜μ—­μ— μƒμ„±λ˜μ—ˆλ‹€κ°€ 사라진닀. 이 μ˜μ—­μ—μ„œ 객체가 μ‚¬λΌμ§ˆλ•Œ Minor GCκ°€ λ°œμƒν•œλ‹€κ³  λ§ν•œλ‹€.

  • Old μ˜μ—­(Old Generation μ˜μ—­)
    μ ‘κ·Ό λΆˆκ°€λŠ₯ μƒνƒœλ‘œ λ˜μ§€ μ•Šμ•„ Young μ˜μ—­μ—μ„œ 살아남은 객체가 μ—¬κΈ°λ‘œ λ³΅μ‚¬λœλ‹€. λŒ€λΆ€λΆ„ Young μ˜μ—­λ³΄λ‹€ 크게 ν• λ‹Ήν•˜λ©°, 크기가 큰 만큼 Young μ˜μ—­λ³΄λ‹€ GCλŠ” 적게 λ°œμƒν•œλ‹€. 이 μ˜μ—­μ—μ„œ 객체가 μ‚¬λΌμ§ˆ λ•Œ Major GC(ν˜Ήμ€ Full GC)κ°€ λ°œμƒν•œλ‹€κ³  λ§ν•œλ‹€.

2-2. 데이터 흐름

  • Permanent Generation μ˜μ—­(μ΄ν•˜ Perm μ˜μ—­, Method Area)
    κ°μ²΄λ‚˜ μ–΅λ₯˜(intern)된 λ¬Έμžμ—΄ 정보λ₯Ό μ €μž₯ν•˜λŠ” 곳이며, Old μ˜μ—­μ—μ„œ 살아남은 객체가 μ˜μ›νžˆ 남아 μžˆλŠ” 곳은 μ•„λ‹ˆλ‹€.
    이 μ˜μ—­μ—μ„œ GCκ°€ λ°œμƒν•  μˆ˜λ„ μžˆλŠ”λ°, μ—¬κΈ°μ„œ GCκ°€ λ°œμƒν•΄λ„ Major GC의 νšŸμˆ˜μ— ν¬ν•¨λœλ‹€.

  • Old μ˜μ—­μ— μžˆλŠ” 객체가 Young μ˜μ—­μ˜ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우
    Old μ˜μ—­μ—λŠ” 512λ°”μ΄νŠΈμ˜ 덩어리(chunk)둜 λ˜μ–΄ μžˆλŠ” μΉ΄λ“œ ν…Œμ΄λΈ”(card table)이 μ‘΄μž¬ν•œλ‹€.
    μΉ΄λ“œ ν…Œμ΄λΈ”μ—λŠ” Old μ˜μ—­μ— μžˆλŠ” 객체가 Young μ˜μ—­μ˜ 객체λ₯Ό μ°Έμ‘°ν•  λ•Œλ§ˆλ‹€ 정보가 ν‘œμ‹œλœλ‹€.
    Young μ˜μ—­μ˜ GCλ₯Ό μ‹€ν–‰ν•  λ•Œμ—λŠ” Old μ˜μ—­μ— μžˆλŠ” λͺ¨λ“  객체의 μ°Έμ‘°λ₯Ό ν™•μΈν•˜μ§€ μ•Šκ³ ,
    이 μΉ΄λ“œ ν…Œμ΄λΈ”λ§Œ λ’€μ Έμ„œ GC λŒ€μƒμΈμ§€ μ‹λ³„ν•œλ‹€.

μΉ΄λ“œ ν…Œμ΄λΈ”μ€ write barrierλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€. write barrierλŠ” Minor GCλ₯Ό λΉ λ₯΄κ²Œ ν•  수 μžˆλ„λ‘ ν•˜λŠ” μž₯μΉ˜μ΄λ‹€. write barrirerλ•Œλ¬Έμ— μ•½κ°„μ˜ μ˜€λ²„ν—€λ“œλŠ” λ°œμƒν•˜μ§€λ§Œ μ „λ°˜μ μΈ GC μ‹œκ°„μ€ μ€„μ–΄λ“€κ²Œ λœλ‹€.

3. Young μ˜μ—­ ꡬ성

Young μ˜μ—­μ€ 객체가 제일 λ¨Όμ € μƒμ„±λ˜λŠ” λΆ€λΆ„μœΌλ‘œ 3개의 μ˜μ—­μœΌλ‘œ λ‚˜λ‰œλ‹€.

  • Eden μ˜μ—­
  • Survivor μ˜μ—­(2개)

Survivor μ˜μ—­μ΄ 2개이기 λ•Œλ¬Έμ— 총 3개의 μ˜μ—­μœΌλ‘œ λ‚˜λ‰˜λŠ” 것이닀.
각 μ˜μ—­μ˜ 처리 절차λ₯Ό μˆœμ„œμ— λ”°λΌμ„œ κΈ°μˆ ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  1. μƒˆλ‘œ μƒμ„±ν•œ λŒ€λΆ€λΆ„μ˜ κ°μ²΄λŠ” Eden μ˜μ—­μ— μœ„μΉ˜ν•œλ‹€.

  2. Eden μ˜μ—­μ—μ„œ GCκ°€ ν•œ 번 λ°œμƒν•œ ν›„ 살아남은 κ°μ²΄λŠ” Survivor μ˜μ—­ 쀑 ν•˜λ‚˜λ‘œ μ΄λ™λœλ‹€.

  3. Eden μ˜μ—­μ—μ„œ GCκ°€ λ°œμƒν•˜λ©΄ 이미 살아남은 객체가 μ‘΄μž¬ν•˜λŠ” Survivor μ˜μ—­μœΌλ‘œ 객체가 계속 μŒ“μΈλ‹€.

  4. ν•˜λ‚˜μ˜ Survivor μ˜μ—­μ΄ 가득 차게 되면 κ·Έ μ€‘μ—μ„œ 살아남은 객체λ₯Ό λ‹€λ₯Έ Survivor μ˜μ—­μœΌλ‘œ μ΄λ™ν•œλ‹€.
    그리고 가득 μ°¬ Survivor μ˜μ—­μ€ 아무 데이터도 μ—†λŠ” μƒνƒœλ‘œ λœλ‹€.

  5. 이 과정을 λ°˜λ³΅ν•˜λ‹€κ°€ κ³„μ†ν•΄μ„œ 살아남아 μžˆλŠ” κ°μ²΄λŠ” Old μ˜μ—­μœΌλ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€.

  6. 이 절차λ₯Ό 확인해 보면 μ•Œκ² μ§€λ§Œ Survivor μ˜μ—­ 쀑 ν•˜λ‚˜λŠ” λ°˜λ“œμ‹œ λΉ„μ–΄ μžˆλŠ” μƒνƒœλ‘œ 남아 μžˆμ–΄μ•Ό ν•œλ‹€.
    λ§Œμ•½ 두 Survivor μ˜μ—­μ— λͺ¨λ‘ 데이터가 μ‘΄μž¬ν•˜κ±°λ‚˜, 두 μ˜μ—­ λͺ¨λ‘ μ‚¬μš©λŸ‰μ΄ 0이라면
    μ—¬λŸ¬λΆ„μ˜ μ‹œμŠ€ν…œμ€ 정상적인 상황이 μ•„λ‹ˆλΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

μ΄λ ‡κ²Œ Minor GCλ₯Ό ν†΅ν•΄μ„œ Old μ˜μ—­κΉŒμ§€ 데이터가 μŒ“μΈ 것을 κ°„λ‹¨νžˆ λ‚˜νƒ€λ‚΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

4. Old μ˜μ—­μ— λŒ€ν•œ GC

Old μ˜μ—­μ€ 기본적으둜 데이터가 가득 μ°¨λ©΄ GCλ₯Ό μ‹€ν–‰ν•œλ‹€.
GC 방식에 λ”°λΌμ„œ 처리 μ ˆμ°¨κ°€ λ‹¬λΌμ§€λ―€λ‘œ, μ–΄λ–€ GC 방식이 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄λ©΄ 이해가 μ‰¬μšΈ 것이닀.
GC 방식은 JDK 7을 κΈ°μ€€μœΌλ‘œ 5가지 방식이 μžˆλ‹€.

  • Serial GC
  • Parallel GC
  • Parallel Old GC(Parallel Compacting GC)
  • Concurrent Mark & Sweep GC(μ΄ν•˜ CMS)
  • G1(Garbage First) GC

이 μ€‘μ—μ„œ 운영 μ„œλ²„μ—μ„œ μ ˆλŒ€ μ‚¬μš©ν•˜λ©΄ μ•ˆ λ˜λŠ” 방식이 Serial GCλ‹€.
Serial GCλŠ” λ°μŠ€ν¬ν†±μ˜ CPU μ½”μ–΄κ°€ ν•˜λ‚˜λ§Œ μžˆμ„ λ•Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λ§Œλ“  방식이닀.
Serial GCλ₯Ό μ‚¬μš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯이 많이 떨어진닀.

4-1. Serial GC (-XX:+UseSerialGC)

Old μ˜μ—­μ˜ GCλŠ” mark-sweep-compactμ΄λΌλŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€.
이 μ•Œκ³ λ¦¬μ¦˜μ˜ 첫 λ‹¨κ³„λŠ” Old μ˜μ—­μ— μ‚΄μ•„ μžˆλŠ” 객체λ₯Ό 식별(Mark)ν•˜λŠ” 것이닀.
κ·Έ λ‹€μŒμ—λŠ” νž™(heap)의 μ•ž λΆ€λΆ„λΆ€ν„° ν™•μΈν•˜μ—¬ μ‚΄μ•„ μžˆλŠ” κ²ƒλ§Œ 남긴닀(Sweep).
λ§ˆμ§€λ§‰ λ‹¨κ³„μ—μ„œλŠ” 각 객체듀이 μ—°μ†λ˜κ²Œ μŒ“μ΄λ„λ‘ νž™μ˜ κ°€μž₯ μ•ž λΆ€λΆ„λΆ€ν„° μ±„μ›Œμ„œ
객체가 μ‘΄μž¬ν•˜λŠ” λΆ€λΆ„κ³Ό 객체가 μ—†λŠ” λΆ€λΆ„μœΌλ‘œ λ‚˜λˆˆλ‹€(Compaction).

Serial GCλŠ” 적은 λ©”λͺ¨λ¦¬μ™€ CPU μ½”μ–΄ κ°œμˆ˜κ°€ 적을 λ•Œ μ ν•©ν•œ 방식이닀.

4-2. Parallel GC (-XX:+UseParallelGC)

Parallel GCλŠ” Serial GC와 기본적인 μ•Œκ³ λ¦¬μ¦˜μ€ 같지닀.
κ·ΈλŸ¬λ‚˜ Serial GCλŠ” GCλ₯Ό μ²˜λ¦¬ν•˜λŠ” μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μΈ 것에 λΉ„ν•΄, Parallel GCλŠ” GCλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ“°λ ˆλ“œκ°€ μ—¬λŸ¬ κ°œμ΄λ‹€.
κ·Έλ ‡κΈ° λ•Œλ¬Έμ— Serial GC보닀 λΉ λ₯Έκ²Œ 객체λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.
Parallel GCλŠ” λ©”λͺ¨λ¦¬κ°€ μΆ©λΆ„ν•˜κ³  μ½”μ–΄μ˜ κ°œμˆ˜κ°€ λ§Žμ„ λ•Œ μœ λ¦¬ν•˜λ‹€.
Parallel GCλŠ” Throughput GC라고도 λΆ€λ₯Έλ‹€.

Serial GC와 Parallel GC 비ꡐ

4-3. Parallel Old GC(-XX:+UseParallelOldGC)

Parallel Old GCλŠ” JDK 5 update 6λΆ€ν„° μ œκ³΅ν•œ GC 방식이닀.
μ•žμ„œ μ„€λͺ…ν•œ Parallel GC와 λΉ„κ΅ν•˜μ—¬ Old μ˜μ—­μ˜ GC μ•Œκ³ λ¦¬μ¦˜λ§Œ λ‹€λ₯΄λ‹€.
이 방식은 Mark-Summary-Compaction 단계λ₯Ό κ±°μΉœλ‹€.
Summary λ‹¨κ³„λŠ” μ•žμ„œ GCλ₯Ό μˆ˜ν–‰ν•œ μ˜μ—­μ— λŒ€ν•΄μ„œ λ³„λ„λ‘œ μ‚΄μ•„ μžˆλŠ” 객체λ₯Ό μ‹λ³„ν•œλ‹€λŠ” μ μ—μ„œ
Mark-Sweep-Compaction μ•Œκ³ λ¦¬μ¦˜μ˜ Sweep 단계와 λ‹€λ₯΄λ©°, μ•½κ°„ 더 λ³΅μž‘ν•œ 단계λ₯Ό κ±°μΉœλ‹€.

4-4. CMS GC (-XX:+UseConcMarkSweepGC)

Serial GC와 CMS GC 비ꡐ

CMS GCλŠ” μ§€κΈˆκΉŒμ§€ μ„€λͺ…ν•œ GC 방식보닀 더 λ³΅μž‘ν•˜λ‹€.
초기 Initial Mark λ‹¨κ³„μ—μ„œλŠ” 클래슀 λ‘œλ”μ—μ„œ κ°€μž₯ κ°€κΉŒμš΄ 객체 쀑 μ‚΄μ•„ μžˆλŠ” 객체만 μ°ΎλŠ” κ²ƒμœΌλ‘œ 끝낸닀.
λ”°λΌμ„œ, λ©ˆμΆ”λŠ” μ‹œκ°„μ€ 맀우 짧닀. 그리고 Concurrent Mark λ‹¨κ³„μ—μ„œλŠ” 방금 μ‚΄μ•„μžˆλ‹€κ³  ν™•μΈν•œ κ°μ²΄μ—μ„œ μ°Έμ‘°ν•˜κ³  μžˆλŠ” 객체듀을 λ”°λΌκ°€λ©΄μ„œ ν™•μΈν•œλ‹€. 이 λ‹¨κ³„μ˜ νŠΉμ§•μ€ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ 쀑인 μƒνƒœμ—μ„œ λ™μ‹œμ— μ§„ν–‰λœλ‹€λŠ” 것이닀.

κ·Έ λ‹€μŒ Remark λ‹¨κ³„μ—μ„œλŠ” Concurrent Mark λ‹¨κ³„μ—μ„œ μƒˆλ‘œ μΆ”κ°€λ˜κ±°λ‚˜ μ°Έμ‘°κ°€ 끊긴 객체λ₯Ό ν™•μΈν•œλ‹€.
λ§ˆμ§€λ§‰μœΌλ‘œ Concurrent Sweep λ‹¨κ³„μ—μ„œλŠ” μ“°λ ˆκΈ°λ₯Ό μ •λ¦¬ν•˜λŠ” μž‘μ—…μ„ μ‹€ν–‰ν•œλ‹€.
이 μž‘μ—…λ„ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒν™©μ—μ„œ μ§„ν–‰ν•œλ‹€.

μ΄λŸ¬ν•œ λ‹¨κ³„λ‘œ μ§„ν–‰λ˜λŠ” GC 방식이기 λ•Œλ¬Έμ— stop-the-world μ‹œκ°„μ΄ 맀우 짧닀.
λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 응닡 속도가 맀우 μ€‘μš”ν•  λ•Œ CMS GCλ₯Ό μ‚¬μš©ν•˜λ©°, Low Latency GC라고도 λΆ€λ₯Έλ‹€.

그런데 CMS GCλŠ” stop-the-world μ‹œκ°„μ΄ μ§§λ‹€λŠ” μž₯점에 λ°˜ν•΄ λ‹€μŒκ³Ό 같은 단점이 μ‘΄μž¬ν•œλ‹€.

  • λ‹€λ₯Έ GC 방식보닀 λ©”λͺ¨λ¦¬μ™€ CPUλ₯Ό 더 많이 μ‚¬μš©ν•œλ‹€.
  • Compaction 단계가 기본적으둜 μ œκ³΅λ˜μ§€ μ•ŠλŠ”λ‹€.

λ”°λΌμ„œ, CMS GCλ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” μ‹ μ€‘νžˆ κ²€ν† ν•œ 후에 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
그리고 μ‘°κ°λ‚œ λ©”λͺ¨λ¦¬κ°€ λ§Žμ•„ Compaction μž‘μ—…μ„ μ‹€ν–‰ν•˜λ©΄ λ‹€λ₯Έ GC λ°©μ‹μ˜ stop-the-world μ‹œκ°„λ³΄λ‹€
stop-the-world μ‹œκ°„μ΄ 더 κΈΈκΈ° λ•Œλ¬Έμ— Compaction μž‘μ—…μ΄ μ–Όλ§ˆλ‚˜ 자주, μ˜€λž«λ™μ•ˆ μˆ˜ν–‰λ˜λŠ”μ§€ 확인해야 ν•œλ‹€.

4-5. G1 GC

λ‹€μŒ κ·Έλ¦Όμ—μ„œ λ³΄λ‹€μ‹œν”Ό, G1 GCλŠ” λ°”λ‘‘νŒμ˜ 각 μ˜μ—­μ— 객체λ₯Ό ν• λ‹Ήν•˜κ³  GCλ₯Ό μ‹€ν–‰ν•œλ‹€.
κ·ΈλŸ¬λ‹€κ°€, ν•΄λ‹Ή μ˜μ—­μ΄ 꽉 μ°¨λ©΄ λ‹€λ₯Έ μ˜μ—­μ—μ„œ 객체λ₯Ό ν• λ‹Ήν•˜κ³  GCλ₯Ό μ‹€ν–‰ν•œλ‹€.
즉, μ§€κΈˆκΉŒμ§€ μ„€λͺ…ν•œ Young의 세가지 μ˜μ—­μ—μ„œ 데이터가 Old μ˜μ—­μœΌλ‘œ μ΄λ™ν•˜λŠ” 단계가 사라진 GC 방식이라고 μ΄ν•΄ν•˜λ©΄ λœλ‹€.
G1 GCλŠ” CMS GCλ₯Ό λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œ λ§Œλ“€μ–΄ μ‘Œλ‹€. G1 GC의 κ°€μž₯ 큰 μž₯점은 μ„±λŠ₯이닀. μ§€κΈˆκΉŒμ§€ μ„€λͺ…ν•œ μ–΄λ–€ GC 방식보닀도 λΉ λ₯΄λ‹€.


Reference & Additional Resources