CodeGym/Java Course/๋ชจ๋“ˆ 3/Java์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ์œ ํ˜•

Java์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ์œ ํ˜•

์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ง๋ ฌ GC

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ ํž™์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด Java์˜ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

JVM(Java Virtual Machine)์—๋Š” 8๊ฐ€์ง€ ์œ ํ˜•์˜ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์„ ์ž์„ธํžˆ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ง๋ ฌ GC๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ GC ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œ๊ทœ๋ชจ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ด๋ฒคํŠธ๋Š” ๋™์ผํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์••์ถ•์€ ๊ฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ํ›„์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ง๋ ฌ GC

์ˆ˜์ง‘๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ผ์‹œ ์ค‘๋‹จ๋˜๋Š” "์„ธ๊ณ„ ์ค‘์ง€" ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ค‘์— ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘์ง€๋˜๋ฏ€๋กœ ์ง€์—ฐ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋ฉด ์‹ค์ƒํ™œ์—์„œ ์ด์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์ง๋ ฌ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ JVM ์ธ์ˆ˜๋Š” -XX:+UseSerialGC ์ž…๋‹ˆ๋‹ค .

๋ณ‘๋ ฌ GC

๋ณ‘๋ ฌ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ํ•˜๋“œ์›จ์–ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ค‘๋Œ€ํ˜• ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ GC ๊ตฌํ˜„์ด๋ฉฐ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ Š์€ ์„ธ๋Œ€์—์„œ ์ž‘์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์Šค๋ ˆ๋“œ๋Š” ์ด์ „ ์„ธ๋Œ€์˜ ๊ธฐ๋ณธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ GC

๋ณ‘๋ ฌ GC๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ธ์ƒ์ด "์ค‘์ง€"๋˜๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ๋ฐฐ์น˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋•Œ์™€ ๊ฐ™์ด ๋งŽ์€ ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•˜๊ณ  ๊ธด ์ผ์‹œ ์ค‘์ง€๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ JVM ์ธ์ˆ˜๋Š” -XX:+UseParallelGC ์ž…๋‹ˆ๋‹ค .

์”จ์— ์—์ŠคGC

๋‚ฎ์€ ๋‚˜๋จธ์ง€ ๋ณ‘๋ ฌ ํ”ผ์ปค ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค .

์—ฌ๊ธฐ์—์„œ ์ž‘์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ด€๋ จ๋˜๋ฉฐ ์ด๋Š” ๋ณ‘๋ ฌ ์ˆ˜์ง‘๊ธฐ์—์„œ์™€ ๋™์ผํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ ์ด์ „ ๋ณ‘๋ ฌ GC์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์ด์ง€๋งŒ CMS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์„ธ์Šค์™€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด "์›”๋“œ ์Šคํ†ฑ" ์ด๋ฒคํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

์”จ์— ์—์ŠคGC

์ด ๋•Œ๋ฌธ์— CMS ์ปฌ๋ ‰ํ„ฐ๋Š” ๋‹ค๋ฅธ ์ปฌ๋ ‰ํ„ฐ๋ณด๋‹ค ๋” ๋งŽ์€ CPU๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ CPU๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ๋‹ค๋ฉด ๋‹จ์ˆœํ•œ ๋ณ‘๋ ฌ ์ˆ˜์ง‘๊ธฐ๋ณด๋‹ค CMS๊ฐ€ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. CMS GC๋Š” ์••์ถ•๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ๋งˆํฌ ์Šค์œ• ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ JVM ์ธ์ˆ˜๋Š” -XX:+UseConcMarkSweepGC ์ž…๋‹ˆ๋‹ค .

G1(์“ฐ๋ ˆ๊ธฐ ์šฐ์„ ) โ€‹โ€‹GC

G1GC๋Š” CMS๋ฅผ ๋Œ€์ฒดํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜์—ˆ์œผ๋ฉฐ ํฐ ํž™ ํฌ๊ธฐ(4GB ์ด์ƒ)๊ฐ€ ํŠน์ง•์ธ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CMS์™€ ๊ฐ™์ด ๋ณ‘๋ ฌ์ ์ด๊ณ  ๊ฒฝ์Ÿ๋ ฅ์ด ์žˆ์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ด์ „ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์™€๋Š” ๋งค์šฐ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

G1๋„ ์„ธ๋Œ€๋ณ„๋กœ ์šด์˜๋˜์ง€๋งŒ ์ Š์€ ์„ธ๋Œ€์™€ ๊ธฐ์„ฑ์„ธ๋Œ€๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ๊ณต๊ฐ„์€ ์—†๋‹ค. ๋Œ€์‹  ๊ฐ ์„ธ๋Œ€๋Š” ์˜์—ญ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ์ Š์€ ์„ธ๋Œ€์˜ ํฌ๊ธฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

G1์€ ํž™์„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ์˜์—ญ ์„ธํŠธ(ํž™ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์˜์—ญ์€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์˜ค๋ž˜๋˜๊ณ  ์ Š์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆํฌ์—… ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด G1์€ ์–ด๋Š ์˜์—ญ์— ์ •ํฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€์ง€ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์‹œ ์ค‘์ง€๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ G1์€ ์ผ๋ถ€ ์˜์—ญ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„ ์ œํ•œ์ด ๋†’๊ฒŒ ์„ค์ •๋œ ๊ฒฝ์šฐ G1์€ ๋” ๋งŽ์€ ์˜์—ญ์„ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

G1 GC๋Š” ๊ฐ€๋น„์ง€๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์˜์—ญ์„ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๋‹น ์˜์—ญ์—์„œ ๋จผ์ € ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ "Garbage First"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Eden, Survivors, Old Memory ์˜์—ญ ์™ธ์—๋„ G1GC์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

  • Humongous (Huge) - ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฐ์ฒด์šฉ(ํž™ ํฌ๊ธฐ์˜ 50% ์ด์ƒ).
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ - ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

G1 ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ JVM ์ธ์ˆ˜๋Š” -XX:+UseG1GC ์ž…๋‹ˆ๋‹ค .

์…ฐ๋„Œ๋„์–ด(์ƒจ๋‹ค๋ผ)

Shenandoah ๋Š” JDK 12์˜ ์ผ๋ถ€๋กœ ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด GC์ž…๋‹ˆ๋‹ค. G1์— ๋น„ํ•ด Shenandoah์˜ ์ฃผ์š” ์ด์ ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์™€ ๋™์‹œ์— ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. G1์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ผ์‹œ ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ์—๋งŒ ํž™ ์˜์—ญ์„ ๋น„์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ Shenandoah๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋™์‹œ์— ๊ฐœ์ฒด๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

Shenandoah๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ์ฆ‰์‹œ ๋ผ์ด๋ธŒ ๊ฐœ์ฒด๋ฅผ ์••์ถ•ํ•˜๊ณ , ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ , RAM์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ์‹œ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— Shenandoah๋Š” CPU๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Shenandoah ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์— ๋Œ€ํ•œ JVM ์ธ์ˆ˜: -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC .

ZGC

ZGC ๋Š” JDK 11์˜ ์ผ๋ถ€๋กœ ๋ฆด๋ฆฌ์Šค๋˜๊ณ  JDK 12์—์„œ ๊ฐœ์„ ๋œ ๋˜ ๋‹ค๋ฅธ GC์ž…๋‹ˆ๋‹ค.

์†๋„์™€ ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„(10ms ๋ฏธ๋งŒ์˜ ์ผ์‹œ ์ค‘์ง€)์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋งค์šฐ ํฐ ํž™(์ˆ˜ ํ…Œ๋ผ๋ฐ”์ดํŠธ)์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ZGC์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„, ํ™•์žฅ์„ฑ ๋ฐ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Java ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ZGC๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ณ  ์šด์˜ ์ฒด์ œ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ZGC๋Š” ๋งค์šฐ ๋‚ฎ์€ ๋ถˆ๊ฐ ์‹œ๊ฐ„(์ผ๋ฐ˜์ ์œผ๋กœ 2ms ์ด๋‚ด)์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ ๊ธฐ์กด GC์— ๋น„ํ•ด ์ƒ๋‹นํ•œ ๊ฐœ์„ ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ZGC์˜ ์ฃผ์š” ๋ชฉํ‘œโ€Š

ZGC ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ JVM ์ธ์ˆ˜๋Š” -XX:+UnlockExperimentalVMOptions -XX:+UseZGC ์ž…๋‹ˆ๋‹ค .

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค