๐ŸŽจ Frontend/JavaScript

[JavaScript] ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

devCloud 2026. 3. 30. 17:18

JavaScript ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ฆฌ

1. ๋ฉ”๋ชจ๋ฆฌ ์ƒ๋ช… ์ฃผ๊ธฐ

ํ• ๋‹น → ์‚ฌ์šฉ → ํ•ด์ œ

  • JavaScript๋Š” ์—”์ง„์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ : C์–ธ์–ด๋Š” malloc(), free()๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์Šคํƒ(Stack) vs ํž™(Heap)

์Šคํƒ (Stack)

  • ์›์‹œ๊ฐ’, ์ฐธ์กฐ ์ฃผ์†Œ ์ €์žฅ
  • ๊ณ ์ • ํฌ๊ธฐ (์ •์  ๋ฉ”๋ชจ๋ฆฌ)
  • ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„
  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ, ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จ๋จ

ํž™ (Heap)

  • ๊ฐ์ฒด, ๋ฐฐ์—ด ์ €์žฅ
  • ๊ฐ€๋ณ€ ํฌ๊ธฐ (๋™์  ๋ฉ”๋ชจ๋ฆฌ)
  • ์Šคํƒ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ

3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (GC)

Reference Counting (์ฐธ์กฐ ํšŸ์ˆ˜ ๊ณ„์‚ฐ)

  • ์ฐธ์กฐ ํšŸ์ˆ˜๋ฅผ ์„ธ์„œ 0์ด ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆ˜๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ์ : ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐœ์ƒ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Mark-and-Sweep โญ

  • ๋ฃจํŠธ(Root)์—์„œ ๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์ˆ˜๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ํ˜„๋Œ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

4. V8 ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

๊ตฌ์กฐ์  ํŠน์ง•

  • New Space: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์œ„์น˜ํ•˜๋ฉฐ, Minor GC๊ฐ€ ๋น ๋ฅด๊ณ  ์ž์ฃผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • Old Space: GC์—์„œ 2๋ฒˆ ์ด์ƒ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•˜๋ฉฐ, Major GC๊ฐ€ ๊ฐ€๋” ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™” ๊ธฐ์ˆ 

  • ํ—ฌํผ ์Šค๋ ˆ๋“œ๊ฐ€ GC๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๊ณ„์† ์‹คํ–‰๋˜๋ฏ€๋กœ, ์‹คํ–‰์ด ๋ฉˆ์ถ”๋Š” Stop-the-World ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ ๐Ÿ’ก

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

'๐ŸŽจ Frontend > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] Event Loop  (0) 2026.03.30
[JavaScript] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ  (0) 2026.03.30