ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Garbage Collector ์ด์•ผ๊ธฐ - ์ •์˜, ์™œ, ์–ธ์ œ, ์–ด๋–ป๊ฒŒ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ข…๋ฅ˜
    ๊ฐœ๋ฐœ/Java 2022. 4. 11. 23:21

     

    ์ข‹์€ ๊ฐœ๋ฐœ์ž๋Š” "๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ" ๋˜ํ•œ ์ž˜ ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋ž˜์„œ Java๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ์ ˆ๋Œ€ ๋นผ๋จน์„ ์ˆ˜ ์—†๋Š” ๋‚ด์šฉ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ์ž…๋‹ˆ๋‹ค.

     

    JVM (Java Virtual Machine)์„ ๋จผ์ € ๊ณต๋ถ€ํ•˜๊ณ  ์˜ค๋ฉด ๋” ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    JVM์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ๋งํฌ๋กœ ์˜ค์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

     

    https://mong-dev.tistory.com/38
     

    JVM์ด์•ผ๊ธฐ - ์ •์˜(+JRE, JDK), ๊ตฌ์กฐ

    JVM (Java Virtual Machine ) ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์ปดํ“จํ„ฐ๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ(2์ง„์ˆ˜)๋กœ ์ž‘์„ฑ๋œ ๊ธฐ๊ณ„์–ด๋กœ๋งŒ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ์€ ๊ทธ ๊ธฐ๊ณ„์–ด๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. (๋ชจ๋‹ˆํ„ฐ์— 011010101

    mong-dev.tistory.com

     

     

    ์ •์˜


    Garbage Collector๋ž€?
    ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ํƒ์ง€ํ•˜์—ฌ ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ

     

     

    GC๋Š” ์™œ ์ผ์–ด๋‚˜๋Š”๊ฐ€?


    ์–ด๋ ต๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ๋ณด๋‹ค, ์‰ฝ๊ฒŒ ์‹ค์ƒํ™œ์˜ ์˜ˆ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์ฃผ๋ฐฉ์žฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ๋ฐฉ์žฅ์€ ์š”๋ฆฌ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ๋ƒ‰์žฅ๊ณ ์—์„œ ์Œ์‹์„ ๊บผ๋‚ด์˜ต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ์Œ์‹์€ ํ…Œ์ด๋ธ”์— ๋‘๊ณ  ์š”๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ด ์žฌ๋ฃŒ๋“ค๋กœ ๊ฐ€๋“ ์ฐจ๋ฉด ๊ทธ ๋‹ค์Œ ์š”๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์š”๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์žฌ๋ฃŒ๋“ค์€ ๊ทธ๋•Œ๊ทธ๋•Œ ์น˜์›Œ์ฃผ๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     

    ๊ธฐ์กด์—๋Š” ์ฃผ๋ฐฉ์žฅ์ด ์น˜์šฐ๋Š” ๊ฒƒ ๊นŒ์ง€ ๋ชจ๋‘ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ ˆ์„œํ”ผ์— ๋ชจ๋‘ ์ ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1. ์ƒ์„ ์„ ๊บผ๋‚ธ๋‹ค. 2. ์นผ์„ ๊บผ๋‚ธ๋‹ค. 3. ์ƒ์„ ์„ ์ž๋ฅธ๋‹ค. 4. ์นผ์„ ์น˜์šด๋‹ค. 5. ์ƒ์„ ์„ ์น˜์šด๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๋ง์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํ˜น์‹œ๋ผ๋„ ์‹ค์ˆ˜๋กœ ์ƒ์„ ์„ ์น˜์šฐ๋Š” ๊ฒƒ์„ ์ ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•˜๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ์—๊ฒŒ ์•„์ฃผ ๋˜‘๋˜‘ํ•œ ์กฐ์ˆ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ฐฉ์žฅ์ด ์ผ์ผ์ด ๋ ˆ์„œํ”ผ์— ๋ฌด์—‡์„ ์น˜์›Œ์•ผํ• ์ง€ ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„, ๊ทธ ์กฐ์ˆ˜๋Š” ์ฃผ๋ฐฉ์žฅ์ด ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ฒดํฌ๋ฅผ ํ•ด๋†“๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์žฌ๋ฃŒ๋“ค์„ ์•Œ์•„์„œ ์ž˜ ์น˜์›Œ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ฐฉ์žฅ์€ ํ›จ์”ฌ ์ด ํ…Œ์ด๋ธ”์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

     

    ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€, ์ด ์ด์•ผ๊ธฐ๋ฅผ ๋‹ค์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€์ž…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ ˆ์„œํ”ผ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๊ธฐ์กด์— C์–ธ์–ด์—์„œ๋Š” ์ฒ˜์Œ ์ฃผ๋ฐฉ์žฅ์ด ๋ ˆ์„œํ”ผ์— ์ผ์ผ์ด ๋‹ค ์ ์–ด์ฃผ๋“ฏ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ํ•ด์ œ๋ฅผ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฆฌ ์‹ ์ค‘ํ•œ ์‚ฌ๋žŒ์ด๋”๋ผ๋„, ๊นœ๋นก ๋†“์น˜๊ณ  ๋‚จ๊ฒจ ๋‘๋Š” ์ผ์ด ์ƒ๊ธฐ๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ฐ”๋กœ Memory Leak(๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜)๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

     

    ๊ทธ๋Ÿฐ๋ฐ, C์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ์ž๋ฐ”์—๊ฒŒ๋Š” ์ฃผ๋ฐฉ์žฅ์ด ์•ˆ์“ฐ๋Š” ์นผ์„ ์•Œ์•„์„œ ์น˜์›Œ์ฃผ๋Š” ๋˜‘๋˜‘ํ•œ ์กฐ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Garbage Collector (๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ)์ž…๋‹ˆ๋‹ค. Garbage๋Š” '์“ฐ๋ ˆ๊ธฐ'๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์“ฐ๋ ˆ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     

    ์ด์ œ ์œ„์—์„œ ๋งํ•œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ํƒ์ง€ํ•˜์—ฌ ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ๊ฐœ๋…์˜ ์˜๋ฏธ๊ฐ€ ์กฐ๊ธˆ ๋” ์™€๋‹ฟ์œผ์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     

     

    GC๋Š” ์–ด๋””์—์„œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?


    ์ด ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ธฐ ์ „์—, ๋จผ์ € JVM์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋– ์˜ฌ๋ ค๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธ€ ์œ„์— ๋งํฌ ๊ฑธ์–ด๋†“์€ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜์‹œ๋ฉด ๊ด€๋ จ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JVM์— ๋Œ€ํ•ด ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉฐ ์ž ๊น ์–ธ๊ธ‰ํ•œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, JVM์˜ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ ์—ญํ• ์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

     

    ์—ฌ๊ธฐ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” Execution Engine์ด๋ผ๋Š” ๊ณณ์— ์žˆ์Šต๋‹ˆ๋‹ค.

     

    Execution Engine

     

    ์ด๋Ÿฌํ•œ GC(Garbage Collection)๋Š” Heap ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ™œ๋™์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ Heap์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋„ ๋‹น์—ฐํžˆ ๋ณด์•„์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    Heap Area - Permanent Generation์€ Java 8๋ฒ„์ „ ๋ถ€ํ„ฐ Native Method Stack์— ํŽธ์ž…

     

     

    ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํฌ๊ฒŒ Young Generation, Old Generation์ด๋ผ๋Š” 2๊ฐœ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ '์•ฝํ•œ ์„ธ๋Œ€ ๊ฐ€์„ค(weak generational hypothesis)'๋ผ๋Š” ๊ฐ€์„ค์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

     

    - ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ(Unreachable)ํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    - ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

     

    ์ฒซ๋ฒˆ์งธ ๊ฐ€์ •์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ์ค‘๊ด„ํ˜ธ({})์•ˆ์—์„œ ์ƒ์„ฑ์„ ํ•˜๊ณ , ์ด ๊ฐ์ฒด๋“ค์€ ๊ด„ํ˜ธ๊ฐ€ ๋๋‚˜๋Š” ์‹œ์ ์—์„œ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ unreachableํ•œ ์ƒํƒœ๊ฐ€ ๋˜์–ด GC์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

     

    ๋‘๋ฒˆ์งธ ๊ฐ€์ •์„ ๋ณด๋ฉด, ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด๋Š” ์ˆœ์ฐจ์ ์ธ ๋กœ์ง์— ์˜ํ•ด ์ƒ์„ฑํ•˜์—ฌ ํ™œ์šฉ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์•ž์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๊ทธ ๋‹ค์Œ์˜ ๋กœ์ง์—์„œ ์‚ฌ์šฉ๋œ ์ดํ›„ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋”์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด GC๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

     

    GC๋ผ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ Heap Area์—์„œ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ์š”, ์ „ํ†ต์ ์ธ Heap Area๋Š” ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , Eden, Survivor0, Survivor1, Old Generation์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. (Permanent Generation์€ Java 8๋ฒ„์ „ ๋ถ€ํ„ฐ Native Method Stack์— ํŽธ์ž…) 

     

    ์ด๋ ‡๊ฒŒ GC๋Š” ๊ฐ ์˜์—ญ์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šด์˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

     

     

    GC๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?


    1. ๋งจ์ฒ˜์Œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Eden ์˜์—ญ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

     

    2. Eden์˜์—ญ์ด ์ฐจ๋ฉด, ๋ฏธ์‚ฌ์šฉ ๊ฐ์ฒด์˜ ์ œ๊ฑฐ์™€ ํ•จ๊ป˜ ์•„์ง ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋Š” Survivor0, Survivor1 ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‹จ, ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ Survivor ์˜์—ญ์˜ ํฌ๊ธฐ๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ Old Generation์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.)

     

    Minor GC

     

    3. ์ฐธ๊ณ ๋กœ Survivor0์™€ Survivor1 ์˜์—ญ์€ ๋‘˜ ์ค‘ ํ•œ๊ณณ์—๋งŒ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๊ฒŒ๋” ์šด์˜๋˜๋ฉฐ, ๋‹ค๋ฅธ ํ•œ ๊ณณ์€ ๋น„์–ด์ ธ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต From, To๋กœ ๊ตฌ๋ถ„์„ ํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” Survivor์˜์—ญ(From)์ด ๊ฐ€๋“ ์ฐจ๋ฉด ๋‹ค๋ฅธ Survivor ์˜์—ญ(To)๋กœ ๋ณด๋‚ด๊ณ , ๊ธฐ์กด์˜ From์„ ๋น„์šฐ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

     

    ์ดํ•ด๊ฐ€ ์–ด๋ ค์šฐ์‹ค ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค)

     

    eden์˜์—ญ์ด ๊ฝ‰์ฐจ๊ณ , Survivor0์œผ๋กœ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•จ์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€, Survivor0์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋˜์—ˆ์„๋•Œ, ์—ฌ๊ธฐ์„œ๋„ GC๊ฐ€ ์ผ์–ด๋‚  ๊ฒƒ์ด๊ณ , ๊ฑฐ๊ธฐ์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ ์ด๋ฒˆ์—๋Š” Survivor1์œผ๋กœ ์ด๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋™ํ•˜๋ฉด์„œ score๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด์ž๋ฉด, ์˜ˆ๋ฅผ๋“ค์–ด Minor GC๋ฅผ ํ†ตํ•ด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด์˜ Survivor0์—์„œ์˜ ์Šค์ฝ”์–ด๊ฐ€ 0์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, Survivor1์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๊ทธ ์Šค์ฝ”์–ด๊ฐ€ 1๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ Survivor์˜ ๋‘ ์˜์—ญ์ค‘์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๊ณณ์œผ๋กœ ์Œ“์ด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ ๊ณณ์€ ๋น„์›Œ๋‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๊ทธ๋Ÿผ Minor GC๋ฅผ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ Survivor1์— ๋“ค์–ด์˜ค๋Š” ์˜์—ญ์€ ์Šค์ฝ”์–ด ๊ฐ’์ด 1์ด ์•„๋‹Œ 0์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์Šค์ฝ”์–ด๊ฐ€ ๋†’์„์ˆ˜๋ก ์ง„ํ•˜๊ฒŒ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿผ ํ•œ Survivor์˜์—ญ์•ˆ์— score๊ฐ’์ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ํ˜ผ์žฌํ•˜๊ณ  ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    Survivor1์˜ ๋ชจ์Šต

     

    ์œ„ ๊ณผ์ •(1~3)์„ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด, Survivor์˜์—ญ์—์„œ ๊ณ„์† ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ผ์ • score๊ฐ€ ๋ˆ„์ ์ด ๋˜์–ด ๊ธฐ์ค€์น˜ ์ด์ƒ์ด ๋˜๋ฉด Old Generation ์˜์—ญ์œผ๋กœ ์ด๋™์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ Promotion์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

     

    promotion

     

    5. Old Generation ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์•˜๋˜ ๊ฐ์ฒด๋“ค์ด ์ผ์ • ์ˆ˜์ค€ ์Œ“์ด๊ฒŒ ๋˜๋ฉด, ๋ฏธ์‚ฌ์šฉ์œผ๋กœ ํŒ๋‹จ๋œ ๊ฐ์ฒด๋“ค์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” Major GC๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ STW๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

     

    ์—ฌ๊ธฐ์„œ STW๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž ์‹œ ์–ธ๊ธ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    STW๋ž€ Stop The World์˜ ์•ฝ์ž๋กœ, GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. GC๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ GC๊ด€๋ จ Thread๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  Thread๊ฐ€ ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๋“ฏ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ •์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์ž‘์—…์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ ์ ˆํ•œ ๋นˆ๋„์˜ GC ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜์—ฌ, Stop-The-World ์‹œ๊ฐ„์„ ์ค„์—ฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ •์ง€๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 'ํŠœ๋‹'์ด๋ผ๋Š” ๊ฒƒ์€ ์ด ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

     

    ์—ฌ๊ธฐ๊นŒ์ง€ GC๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. GC์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „, ๊ฐ๊ฐ์˜ GC๋Š” ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

     

    GC ์•Œ๊ณ ๋ฆฌ์ฆ˜


    GC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Garbage ๋Œ€์ƒ์„ ์‹๋ณ„ํ•˜๊ณ  ๊ทธ ๋Œ€์ƒ์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ณธ ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

     

    Reference Counting Algorithm

    - ๊ฐ ๊ฐœ์ฒด๋งˆ๋‹ค Reference Count๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๋ฉด GC๋ฅผ ์ˆ˜ํ–‰

    - ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๋ฉด ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ

    - ์ˆœํ™˜ ์ฐธ์กฐ ๊ตฌ์กฐ์—์„œ Reference Count๊ฐ€ 0์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ Memory Leak์ด ๋ฐœ์ƒ

     

    Mark-and-Sweep Algorithm

    - Reference Counting Algorithm์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    - RSet(Root Set)์—์„œ Reference๋ฅผ ์ถ”์ ํ•˜์—ฌ ์ฐธ์กฐ ์ƒํ™ฉ์„ ํŒŒ์•…

    - Mark ๋‹จ๊ณ„์—์„œ Garbage๋Œ€์ƒ์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ๋งˆํ‚นํ•˜๊ณ , Sweep ๋‹จ๊ณ„์—์„œ ๋งˆํ‚น๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ง€์›€

    - ์œ„ ๋‹จ๊ณ„๋ฅผ ๋งˆ์นœ ํ›„ ๋งˆํ‚น ์ •๋ณด๋ฅผ ์ดˆ๊ธฐํ™”

    - ์ด ๋ฐฉ์‹์€ GC๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, Mark ์ž‘์—…๊ณผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ Thread์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Heap์˜ ์‚ฌ์šฉ์ด ์ œํ•œ ๋จ

    - Compaction ์ž‘์—…์ด ์—†์–ด ๊ทธ ์‚ฌ์ด์‚ฌ์ด์— ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์„ ์žฌ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ๋‹ค์‹œ ์‚ฌ์šฉํ• ๋ ค๊ณ  ํ•˜๋Š” ์˜์—ญ๋ณด๋‹ค ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ๋” ํด ๊ฒฝ์šฐ (์ฆ‰, ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ), Out of Memory๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

     

    Mark-and-Compact Algorithm

    - ๊ธฐ์กด์˜ mark and sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ ์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์‚ฐ(fragmentation)์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    - Sweep ์ž‘์—… ์ดํ›„์— Compact ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์–ด ํฉ์–ด์ ธ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ์•„์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰

    - Compact์ž‘์—…์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ

    - ํ•˜์ง€๋งŒ Compact์ž‘์—…๊ณผ ๊ทธ ์ดํ›„ Reference๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ž‘์—…์œผ๋กœ ์ธํ•ด ์˜ค๋ฒ„ํ—ค๋“œ(Overhead)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

     

    ๊ทธ ์™ธ์—๋„ Copying Algorithm, Concurrent Mark-Sweep, Generational Algorithm ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด ์ •๋„๋กœ๋งŒ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ๊ทธ๋Ÿผ ์ด์ œ, ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” GC์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

     

    GC์˜ ์ข…๋ฅ˜


    Serial GC

    - ๊ฐ€์žฅ ์˜ค๋ž˜๋œ GC

    - ํ•˜๋‚˜์˜ CPU๋กœ Young Generation๊ณผ Old Generation์„ ์—ฐ์†์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

    - Mark-and-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ (GC๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ STW๊ฐ€ ๋ฐœ์ƒ)

     

    Parallel GC

    - ์ž๋ฐ” 7~8 ๋ฒ„์ „์—์„œ Default๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” GC

    - ๋‹ค๋ฅธ CPU๊ฐ€ GC์˜ ์ง„ํ–‰์‹œ๊ฐ„ ๋™์•ˆ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ

    - GC์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ STW ์‹œ๊ฐ„์ด ๋น„๊ต์  ์งง์Œ

     

    Parallel Compacting GC

    Parallel GC์—์„œ Old Generation์˜ ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณ€๊ฒฝํ•จ

     

    Concurrent Mark-Sweep(CMS) GC

    - ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์“ฐ๋ ˆ๋“œ์™€ GC์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด STW๋ฅผ ์ตœ์†Œํ™”

    - ๊ทธ์ „์—๋Š” GC์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”์—ˆ์Œ

    - Parallel GC์™€ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ Compaction ์ž‘์—… ์œ ๋ฌด๋กœ ๊ตฌ๋ถ„์ด ๋˜๋Š” ๊ฒƒ

     

    ์—ฌ๊ธฐ์„œ ๋ถ€ํ„ฐ๋Š” ์ „ํ†ต์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ํ˜•ํƒœ๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ์ข€๋” ํŒŒํŽธํ™” ์‹œ์ผœ์„œ ์ผ์ • ํฌ๊ธฐ์˜ Region์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

     

    Garbage First(G1) GC

    - ํฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ GC

    - ๋Œ€๊ทœ๋ชจ Heap ์‚ฌ์ด์ฆˆ์—์„œ ์งง์€ GC ์‹œ๊ฐ„์„ ๋ณด์žฅํ•˜๋Š”๋ฐ(STW๋ฅผ ์ตœ์†Œํ™”) ๋ชฉ์ ์„ ๋‘ 

    - ์ „์ฒด Heap ์˜์—ญ์„ Region์ด๋ผ๋Š” ์˜์—ญ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์—ญํ• ์ด ๋™์ ์œผ๋กœ ๋ถ€์—ฌ ๋จ

     

    Z GC

    - ZPage๋ผ๋Š” ์˜์—ญ์„ ์‚ฌ์šฉ

    - G1 GC์˜ Region์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ธ๋ฐ ๋น„ํ•ด Zpage๋Š” 2mb ๋ฐฐ์ˆ˜๋กœ ๋™์ ์œผ๋กœ ์šด์˜

    - ์ •์ง€ ์‹œ๊ฐ„์ด ์ตœ๋Œ€ 10ms๋ฅผ ์ดˆ๊ณผํ•˜์ง€์•Š๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ์šด์˜

    - Heap์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์ •์ง€ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํŠน์ง•

    ๋Œ“๊ธ€

Designed by Tistory.