GC Algorithm

Parallel CG

Java 8์—์„œ default GC๋กœ ์ ์šฉ

  • minor collection์„ ๋ณ‘๋ ฌ ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค

    • GC์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ˜„์ €ํ•˜๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

  • multi processor๋‚˜ multi thread hardware ์—์„œ ๋Œ์•„๊ฐ€๋Š” ์ค‘๋Œ€ํ˜• ๊ทœ๋ชจ์˜ ๋ฐ์ดํ„ฐ์…‹ ์„ ๋‹ค๋ฃจ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ GC

  • Parallel Compaction

    • Parallel Collector๊ฐ€ major collection์„ ๋ณ‘๋ ฌ ๋กœ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

    • -XX:+UseParallelGC ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด Parallel Compaction์ด ๋””ํดํŠธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค

  • but, multi thread๋ฅผ ์‚ฌ์šฉํ•œ collection ์‚ฌ์šฉ์ด Young ์˜์—ญ์— ๊ตญํ•œ๋œ๋‹ค

    • Young Generation Collection ์•Œ๊ณ ๋ฆฌ์ฆ˜: Parallel Scavenge

    • Old Generation Collection ์•Œ๊ณ ๋ฆฌ์ฆ˜: Serial Mark-Sweep-Compact

G1 (Garbage First Collector)

Java 11์—์„œ default GC๋กœ ์ ์šฉ

  • ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ๋จธ์‹ ์„ ์œ„ํ•œ Collector

  • -XX:+UseG1GC ์˜ต์…˜์œผ๋กœ G1 Collector๋ฅผ ์ผค ์ˆ˜ ์žˆ๋‹ค

  • G1 GC๋งŒ Generational GC๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค

    • G1 collector๋Š” Young ์˜์—ญ๊ณผ Old ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ดํ•œ collector์ด๋‹ค

    • G1์€ ๋ฌผ๋ฆฌ์  generation ๊ตฌ๋ถ„์„ ์—†์• ๊ณ , ์ „์ฒด heap์„ 1MB ๋‹จ์œ„์˜ region๋“ค๋กœ ๋‹ค๋ฃฌ๋‹ค

      • ๋ฐ”๋‘‘ํŒ ๋ชจ์–‘์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•ฝ 2000๊ฐœ์˜ ๊ตฌ์—ญ์„ ์‚ฌ์šฉํ•œ๋‹ค

    • G1 ์ด๋ผ๋Š” ์ด๋ฆ„์€ garbage๋กœ ๊ฐ€๋“์ฐฌ region๋ถ€ํ„ฐ ์ปฌ๋ ‰์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค

      • Garbage๋กœ ๊ฝ‰ ์ฐฌ region์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ฐ”๋กœ collector๋ฅผ ๋Œ๋ฆฐ๋‹ค.

  • Old region์˜ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Old region์œผ๋กœ ์˜ฎ๊ฒจ์ง€๋ฉฐ, compaction์ด ์ด๋ค„์ง„๋‹ค

  • G1์—์„œ Young, Old ์˜์—ญ ๊ฐœ๋…์€ ๊ณ ์ •๋œ ๊ฐœ๋…์ด ์•„๋‹ˆ๋‹ค

    • ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กœ ํ• ๋‹น๋˜๋Š” region๋“ค์˜ ์ง‘ํ•ฉ์ด Young generation ์ด๋‹ค

    • ํ”„๋กœ๋ชจ์…˜์ด ์ผ์–ด๋‚˜๋Š” region์˜ ์ง‘ํ•ฉ์ด Old Generation ์ด๋‹ค

ZGC

Java 17์—์„œ default GC๋กœ ์ ์šฉ

ZGC๋Š” 8MB์—์„œ 16TB ํฌ๊ธฐ์˜ heap์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ low-latency GC์ด๋ฉฐ -XX:+UseZGC option์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค

  • Low-latency

    • ZGC๋Š” memory collection์„ ์œ„ํ•ด ์ผ์‹œ ์ค‘๋‹จ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์‘๋‹ต์„ฑ์„ ๋†’์ธ๋‹ค

    • collection ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ application thread๋Š” ๊ณ„์† ์‹คํ–‰๋˜๋Š” concurrent GC์ด๋ฉฐ, ์ค‘๋‹จ ์‹œ๊ฐ„์€ ๋งค์šฐ ์งง๋‹ค

      • ์ด๋กœ ์ธํ•ด ๋Œ€๊ทœ๋ชจ memory ํ™˜๊ฒฝ์—์„œ๋„ ๋†’์€ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค

      • ์ตœ๋Œ€ ์ง€์—ฐ ์‹œ๊ฐ„์€ 1๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ์ด๋‹ค

  • ๋งค์šฐ ํฐ Heap ์ง€์›

    • ZGC๋Š” ์ˆ˜ 16TB์— ๋‹ฌํ•˜๋Š” ํฐ heap์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

      • ์ด๋กœ ์ธํ•ด ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋‚˜ memory ์ง‘์•ฝ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” application์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค

  • ๋ถˆ์—ฐ์†์ ์ธ ์ˆ˜์ง‘

    • ZGC๋Š” ์ „์ฒด heap์„ ํ•œ ๋ฒˆ์— ์ˆ˜์ง‘ํ•˜๋Š” ๋Œ€์‹ , ์ž‘์€ region ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ garbage collection์„ ์ˆ˜ํ–‰ํ•œ๋‹ค

    • ์ˆ˜์ง‘ ์ž‘์—…์˜ ์ผ๋ถ€๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ผ์‹œ ์ค‘๋‹จ ์‹œ๊ฐ„์„ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค

  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

    • ZGC๋Š” multi-thread๋ฅผ ํ™œ์šฉํ•˜์—ฌ GC ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค

    • ์ด๋ฅผ ํ†ตํ•ด GC ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ์ „์ฒด collection ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•œ๋‹ค

  • ํšจ์œจ์„ฑ

    • collection ์ค‘์— ํž™์„ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด๋‹ค

      • ์ผ๋ฐ˜์ ์ธ GC๋Š” memory collection ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด stop-the-world ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค

        • ์ด๋•Œ, application thread๋“ค์ด ๋ชจ๋‘ ์ผ์‹œ ์ค‘๋‹จ๋˜์–ด GC ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค

        • ์ด๋Ÿฌํ•œ ์ค‘์ง€ ์‹œ๊ฐ„์€ application ์‘๋‹ต์„ฑ๊ณผ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค

      • ๋ฐ˜๋ฉด ZGC๋Š” heap์„ ์ •๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋งค์šฐ ์งง๊ฒŒ ์œ ์ง€ํ•œ๋‹ค

    • ZGC๋Š” collection ์ž‘์—… ์ค‘์—๋„ application thread๋ฅผ ๊ณ„์† ์‹คํ–‰์‹œํ‚ค๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋งค์šฐ ์งง์€ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค

      • ZGC๋Š” ์ผ์‹œ ์ค‘๋‹จ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜์—ฌ application ์‘๋‹ต์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์ค‘์ ์„ ์ค€๋‹ค

Last updated

Was this helpful?