๊ด€๋ฆฌ ๋ฉ”๋‰ด

โœ๐Ÿป๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ

JVM์˜ Garbage Collector ๋ณธ๋ฌธ

Language/Java

JVM์˜ Garbage Collector

์ฉ์‹œํ‚ด 2022. 10. 28. 15:16
728x90

JVM(Java Virtual Machine)

  • ์šด์˜์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ด์ž ๊ฐ€์ƒ ๋จธ์‹ 
  • Garbage Collector ์ˆ˜ํ–‰
    • ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Heap) ์ค‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ์ฒดํฌํ•˜์—ฌ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์šด๋‹ค.
      • GCํƒ„์ƒ ๋ฐฐ๊ฒฝ์˜ ๋‘ ๊ฐ€์ง€ ์ „์ œ ์กฐ๊ฑด
        • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ unreachable ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
        • ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

class Person {
    int id;
    String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

public class PersonBuilder {
    private static Person buildPerson(int id, String name) {
        return new Person(id, name);
    }

    public static void main(String[] args) {
        int id = 23;
        String name = "John";
        Person person = null;
        person = buildPerson(id, name);
    }
}

https://www.baeldung.com/java-stack-heap

Heap

  • ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
  • ๋ชจ๋“  objectํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น
  • heap์˜์—ญ์˜ object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ stack์— ํ• ๋‹น

Garbage Collector๋™์ž‘

  1. gc๊ฐ€ stack์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ๊ฐ๊ฐ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์•„์„œ ๋งˆํ‚น
  2. reachable object๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋„ ์ฐพ์•„์„œ ๋งˆํ‚น
  3. ๋งˆํ‚น๋˜์ง€ ์•Š์€ ๊ฐ์ฒด heap์—์„œ ์ œ๊ฑฐ → sweap

    -> 1,2๋ฒˆ ๋™์ž‘์„ Mark, 3๋ฒˆ ๋™์ž‘์„ Sweap์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

GC ๋™์ž‘ ์‹œ์ 

 

heap์˜ ๊ตฌ์กฐ

https://journaldev.nyc3.digitaloceanspaces.com/2014/05/Java-Memory-Model.png

New generation = Eden + S0(Survival0), S1(Survival1) , old generation

- ์ƒˆ๋กœ์šด ๊ฐ์ฒด Eden์˜์—ญ์— ์ƒ์„ฑ. Eden์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฐจ๋ฉด GC ๋™์ž‘ ์‹œ์ž‘

์ด๋•Œ ๋ฐœ์ƒํ•˜๋Š” GC๋ฅผ Minor GC๋ผ ํ•จ.

GC๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ Mark, Sweap ๋™์ž‘์ด ๋ฐœ์ƒํ•˜๋ฉฐ, Eden์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” S0์œผ๋กœ ์ด๋™

GC ์ข…๋ฅ˜

1. Serial GC

  1. cpu์ฝ”์–ด๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
  2. gc๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ 1๊ฐœ
  3. mark-compact collection ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
    1. mark-compact collection ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ์ˆœ์„œ
      1. mark phrase
        • GC๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ๋งˆํ‚น๋œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š”๋‹ค.
      2. compaction phrase
      3. ์œ„์˜ ๋™์ž‘์„ ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.
for each root variable r
    mark (r);
compact ();

2. Parallel GC

  1. Serial GC๋ณด๋‹ค ์ฒ˜๋ฆฌ์†๋„ ๋น ๋ฆ„
  2. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๊ณ  ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ
  3. gc๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ ์—ฌ๋Ÿฌ ๊ฐœ
๋”๋ณด๊ธฐ

stop-the-world

GC ์‹คํ–‰์„ ์œ„ํ•ด JVM์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์ง€

stop-the-world  ๋ฐœ์ƒ ์‹œ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ์ž‘์—…์„ ๋ฉˆ์ถ˜๋‹ค.

3. Concurrent Mark Sweap GC

  1. stop-the-world๋ฅผ ์ค„์ž„์œผ๋กœ์„œ ์‘๋‹ต์ด ๋นจ๋ผ์•ผ ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ
  2. gc์ž‘์—… ์™„๋ฃŒ ์ดํ›„์— ์ค‘๋‹จํ•œ ์ž‘์—… ๋‹ค์‹œ ์‹œ์ž‘.
  3. gc๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด jvm์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ

4. G1 GC

Eden + S0(Survival0), S1(Survival1) , old generation์„ ํ•˜๋‚˜์˜ ๋ง‰๋Œ€ ๋ชจ์–‘์œผ๋กœ ๋ณด์•˜๋‹ค๋ฉด G1GC์—์„œ๋Š” ๊ฐ ์˜์—ญ์„ region์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

GC๋™์ž‘ ์‹œ Eden Space๋งŒ ์ฒดํฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ

 

https://blog.idrsolutions.com/2017/05/g1gc-java-9-garbage-collector-explained-5-minutes/

 


[์ฐธ๊ณ ]

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์˜ ์›๋ฆฌ์™€ ์ข…๋ฅ˜

NAVER D2

https://www.baeldung.com/java-stack-heap

https://book.huihoo.com/data-structures-and-algorithms-with-object-oriented-design-patterns-in-java/html/page428.html

728x90
๋ฐ˜์‘ํ˜•