Garbage Collector simple summary

2024. 3. 4. 05:20ยท๐Ÿ“‚ programming-language/java
์ด์ „์— GC ๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ

1. Garbage Collector ??

Garbage Collector ๋Š” JVM ์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ง€์šฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. Java ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜์ธ "๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ํ• ๋‹น ํ•ด์ œํ•˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ์ž‘์—…์— ๋ถ€๋‹ด์„ ๋А๋ผ์ง€ ์•Š๋Š”๋‹ค." ๋Š” ์ทจ์ง€์—์„œ Garbage Collector ๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค. 

(3) Automatic Garbage Collection - Java automatically allocates and deallocates memory so programs are not burdened with that task.

 

 

2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ณผ์ • - Generational Garbage Collection 

GC ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JVM ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ํ•œ๋งˆ๋””๋กœ stop-the-world ๋ผ ๋งํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ๋Š” GC ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ฉˆ์ถฐ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ค๋žซ๋™์•ˆ ๋ฉˆ์ถฐ์žˆ๋‹ค๋ฉด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚˜์œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GC ํŠœ๋‹์„ ํ†ตํ•ด stop-the-world ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผ ํ•œ๋‹ค.

 

GC ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ, ์˜ค๋ž˜๋œ ๊ฐ์ฒด์˜ ์ Š์€ ๊ฐ์ฒด ์ฐธ์กฐ๋Š” ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฐ€์„ค์„ ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ HotSpot VM ์€ Young Generation ์™€ Old Generation ๋กœ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

  • Young Generation : ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์˜์—ญ์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„ ๊ธˆ๋ฐฉ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์˜์—ญ์—์„œ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ณผ์ •์„ Minor GC ๋ผ ๋ถ€๋ฅธ๋‹ค.
  • Old Generation : YoungGeneration ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ์ด๋‹ค. YoungGeneration ๋ณด๋‹ค ํฐ ํฌ๊ธฐ๋กœ ํ• ๋‹น๋˜๋ฉฐ, ํฐ ํฌ๊ธฐ ๋งŒํผ GC ๊ฐ€ ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ณผ์ •์„ Full GC ๋ผ ๋ถ€๋ฅธ๋‹ค.

 

GC ์˜์—ญ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋„ (source : Naver D2)

 

3.  Young Generation ๊ตฌ์„ฑ

Young Generation ์€ ๊ฐ์ฒด๊ฐ€ ์ œ์ผ ๋จผ์ € ์ƒ์„ฑ๋˜๋Š” ๊ตฌ๊ฐ„์ด๋‹ค. Young Generation ์€ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด 3๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.  ๊ฐ ์˜์—ญ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

  1. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜ํ•œ๋‹ค. Eden ์˜์—ญ์—์„œ Minor GC ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
  2. Eden ์˜์—ญ์—์„œ Minor GC ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋  ๊ฒฝ์šฐ, ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. (ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์€ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.)
  3. ํ•ด๋‹น ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๊ณ  ๊ทธ ์ค‘ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

4. Card Table

Old Generation ๊ฐ€ Young Generation ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” 512๋ฐ”์ดํŠธ ์ฒญํฌ์ด๋‹ค. ์นด๋“œ ํ…Œ์ด๋ธ”์— Old Generation ์˜ ๊ฐ์ฒด๊ฐ€ Young Generation ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ Young Generation ์˜ GC ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, Card Table ์˜ Old Generation ์˜ ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•ด ์ „์ฒด Old Area ๋ฅผ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

card table structure (source : Naver D2)

 

 

5. Major GC ์˜ ๋Œ€ํ‘œ์  ๋™์ž‘ ๋ฐฉ์‹ : mark-and-sweep-compaction

 ๋Œ€์ฒด์ ์œผ๋กœ GC ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์‹๋ณ„ํ•œ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ Old GC ์˜ mark-and-sweep-compact algorithm ์ด๋‹ค. mark-and-sweep-compact algorithm ์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋™์ž‘ํ•œ๋‹ค.

  1. marking : GC ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋‹จ๊ณ„
  2. deletion with compacting : ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ ์••์ถ•ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋‹จ๊ณ„

 

 

Step 1: Marking

step01. marking

 GC ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. Java GC ๋Š” ์œ ํšจํ•œ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋ฅผ ์œ ํšจํ•˜๋‹ค๊ณ  ํŒ๋ณ„ํ•œ๋‹ค. ์ด ๋•Œ ๊ฐ€์žฅ ์ตœ์ดˆ์˜ ์ฐธ์กฐ๋ฅผ root set ์ด๋ผ ์ •์˜ํ•˜๋ฉฐ, root set ์˜ ๊ธฐ์ค€์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

  • Java ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์— ์˜ํ•œ ์ฐธ์กฐ (Java ์Šคํƒ)
  • JNI(Java Native Interface)์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ (๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ)
  • ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์ •์  ๋ณ€์ˆ˜์— ์˜ํ•œ ์ฐธ์กฐ

rumtime data area (Oracle HotSpot VM)

 

 

Step 2 : deletion with compacting

step2. normal deletion

 

์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ฐธ์กฐ๋œ ๊ฐ์ฒด์™€ ํฌ์ธํ„ฐ๋ฅผ ์—ฌ์œ  ๊ณต๊ฐ„์— ๋‚จ๊ธฐ๊ณ  ์••์ถ• ๊ณผ์ •์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

 

 

6. Major GC ์—๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ–ˆ๋˜ mark-and-sweep-compact algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” Major GC ๋Š” Serial GC, Parallel GC ์ด๋‹ค. ๋‹ค๋ฅธ GC ๋˜ํ•œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•œ GC ๋„ ์กด์žฌํ•˜๊ณ  Java11 ์˜ default Major GC ์ธ G1 GC ์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ์ปจ์…‰์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” Major GC ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊นŠ๊ฒŒ ํŒŒ๋ฉด ๋์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๋ ค๊ณ  ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ปจ์…‰์„ ๋น„๊ตํ•˜๊ณ  ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค์„ ํ•˜๋‚˜์”ฉ ์•Œ์•„๊ฐ€๋ณด๋Š” ์‹์œผ๋กœ ํ•™์Šตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. 

 

 

Reference

  • https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
  • https://d2.naver.com/helloworld/1329
  • https://d2.naver.com/helloworld/329631

'๐Ÿ“‚ programming-language > java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํผ์‚ฌ๋“œ ํŒจํ„ด(Facade Pattern)  (0) 2024.07.08
์ปค๋งจ๋“œ ํŒจํ„ด(command pattern)  (0) 2024.07.08
์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด (chain of responsibility pattern)  (1) 2024.07.05
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(singleton pattern)  (0) 2024.07.03
์ •๋ฐ€ ์—ฐ์‚ฐ์—๋Š” BigDecimal ์„ ์‚ฌ์šฉํ•˜์ž  (0) 2024.04.24
'๐Ÿ“‚ programming-language/java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์ปค๋งจ๋“œ ํŒจํ„ด(command pattern)
  • ์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด (chain of responsibility pattern)
  • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(singleton pattern)
  • ์ •๋ฐ€ ์—ฐ์‚ฐ์—๋Š” BigDecimal ์„ ์‚ฌ์šฉํ•˜์ž
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    JPA
    UUID
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    ํšŒ๊ณ 
    mysql
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    kafka
    spring AOP
    Redisson
    spring-batch
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    nGrinder
    gof
    spring camp 2025
    react
    ๋™์‹œ์„ฑ
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    AWS
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    spring
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
Garbage Collector simple summary
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”