Skip to content

20210914 Garbage Collection

Hee-Jae edited this page Sep 28, 2021 · 9 revisions

ํ† ๋ก  ์ฃผ์ œ

Garbage Collection์€ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘์—์„œ ํ•„์š”์—†๊ฒŒ ๋œ ์˜์—ญ์„ ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋‹จ์ ์œผ๋กœ

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

์ด ๋‹จ์  ์ค‘ ํ•œ๊ฐ€์ง€๋ฅผ ์ •ํ•ด, ์ž์‹ ๋งŒ์˜ ์•„์ด๋””์–ด๋กœ(์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋”ํ•˜๋“ ์ง€, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๋“ ์ง€) ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ˆ˜๋ฆฝํ•˜์—ฌ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ† ๋ก  ๋‚ด์šฉ

์„œ๊ทธ๋ฆผ

์ฒซ๋ฒˆ์งธ ๋‹จ์ ์— ๋Œ€ํ•˜์—ฌ
์ฐธ๊ณ  : [Java] Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•

์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ƒ๊ฐํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์–ธ์–ด๋Š” Java์ž…๋‹ˆ๋‹ค.

  • Java Collection API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๊ทธ ํฌ๊ธฐ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒ์„ฑ ์‹œ์— ์ง์ ‘ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ArrayList์˜ ๊ฒฝ์šฐ, ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ •ํ•ด์ง„ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋ถ™์—ฌ์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํฌ๊ธฐ์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜์–ด ๊ฐ€๋น„์ง€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • Stream์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ •ํ•œ chunk ๋งŒํผ์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด OutOfMemoryErrors๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Stream์„ ์‚ฌ์šฉํ•˜์—ฌ Buffer๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ OutOfMemoryErrors๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฐ€๋น„์ง€์˜ ์ƒ์„ฑ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถˆ๋ณ€์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด, ๊ทธ ๊ทœ๋ชจ๊ฐ€ ์ปค์กŒ์„ ๋•Œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์Šค์บ”ํ•ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๋ฉด ์Šค์บ”ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋นˆ๋„์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํฌ์žฌ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€

  • Heap ๊ณต๊ฐ„์ด Eden, Survivor1, Survivor2, Old ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Eden์— ์ €์žฅ๋˜๊ณ , Eden์ด ๊ฝ‰์ฐจ๋ฉด Mark and Sweep์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ Survivor1์œผ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. Survivor1์ด ๊ฝ‰์ฐจ๋ฉด ์—ญ์‹œ Mark and Sweep ์ง„ํ–‰ ํ›„ Survivor2๋กœ ์ด๋™๋˜๊ณ , Survivor2๊ฐ€ ๊ฝ‰์ฐจ๋ฉด ์—ญ์‹œ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„ ๋‹ค์‹œ Survivor1์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. Survivor1๊ณผ Survivor2๋กœ ์ด๋™์„ ํŠน์ • ํšŸ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ณ  ๋‚˜๋ฉด Old๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Old๊ฐ€ ๊ฝ‰์ฐจ๊ฒŒ ๋˜๋ฉด Mark and Sweep ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ณ  ๋น„์›Œ์ง„ ๊ณต๊ฐ„๋“ค์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด Compaction์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด Compaction ๊ณผ์ •์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค์ด ์ผ์‹œ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

Mark and Sweep: ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด(์“ฐ๋ ˆ๊ธฐ ๊ฐ’)๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ๋น„์›Œ๋‚ด๋Š” ๊ณผ์ •

์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ ์ค‘์ง€๋˜๋Š” ํ˜„์ƒ์„ ์ตœ์†Œํ™” ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

  • ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋ฐœ์ƒํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ•  ๋•Œ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ ํ•ด์ฃผ์–ด ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๊ฐ€ ํ•˜๊ฒŒ๋˜๋Š” ์ผ์˜ ์–‘์„ ์ค„์—ฌ ์ค๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ง€์›ํ•˜๋Š” Java์˜ ๊ฒฝ์šฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ์ง์ ‘ ํ•ด์ œ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์•„์ง ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Old ๊ตฌ์—ญ์˜ ๊ณต๊ฐ„์ด ๊ฝ‰ ์ฐผ์„ ๋•Œ Mark and Sweep์„ ์ง„ํ–‰ํ•œ ํ›„ Compaction ๊ณผ์ •์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ค‘์ง€ ์‹œํ‚ค๋Š” ๊ทผ๋ณธ์ ์ธ ์›์ธ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋Ÿด ๊ฒฝ์šฐ Old ๊ตฌ์—ญ์— ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜์™€ ๋น„์–ด์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ Old ๊ตฌ์—ญ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด ํ• ๋‹น ์‹œ ์ฐธ์กฐํ•˜์—ฌ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค.

ํ† ๋ก  ๊ฒฐ๊ณผ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์˜๋ฏธ์žˆ๋Š” ์‹œ๊ฐ„์ด์—ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ตํžˆ์ž๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

Clone this wiki locally