[Javascript] GC์˜ ๊ตฌ์กฐ (V8)

[์›๋ณธ ๋งํฌ]

Javascript๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋Ÿฐํƒ€์ž„์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋‹ค.
๊ทธ๋ž˜์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋˜ํ•œ ์–ธ์–ด ๋ฐ– ๋Ÿฐํƒ€์ž„์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” Javscript, ๊ทธ ์ค‘์—์„œ๋„ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด์ธ V8์—์„œ GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

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

๊ทธ๋ž˜์„œ Node.js ๊ฐ™์€ ๊ฒŒ ์„œ๋ฒ„์Šคํƒ์œผ๋กœ ๊ฝค ์œ ํ–‰ํ•˜๊ณ ๋Š” ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋น„ํšจ์œจ์ ์ธ ๋ถ€๋ถ„์ด ๋งŽ์ด ์กด์žฌํ•œ๋‹ค.

๊ตณ์ด ๋น„๊ตํ•˜์ž๋ฉด V8์˜ GC ๋ฐฉ์‹์€ Go์™€ ๊ฐ€์žฅ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” Java, Go์˜ GC์™€๋„ ๋น„๊ต๋ฅผ ์ข…์ข… ํ•  ๊ฒƒ์ด๋‹ค.
https://m.blog.naver.com/sssang97/223575258532
https://m.blog.naver.com/sssang97/223576600679




์„ธ๋Œ€ ๊ธฐ๋ฐ˜(Generational) GC

V8 ๋˜ํ•œ GC ์—…๊ณ„์˜ ์ „ํ†ต์ ์ธ ๋ฃฐ์— ๋”ฐ๋ผ ์„ธ๋Œ€ ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์„ธ๋Œ€๋ณ„ GC๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์—์„œ ์šฐ๋Ÿฌ๋‚œ ๊ฐ€์„ค์„ ํ† ๋Œ€๋กœ ํ•œ๋‹ค.

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ฃฝ๋Š”๋‹ค.
  2. GC์—์„œ ์‚ด์•„๋‚จ์€ ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก, ๊ทธ ๊ฐ์ฒด๋Š” ๋” ์˜ค๋ž˜ ์‚ด์•„์žˆ์„ ํ™•๋ฅ ์ด ์ปค์ง„๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์— ํž˜์ž…์–ด V8 GC ๋˜ํ•œ ์‹ ์„ธ๋Œ€์™€ ๊ตฌ์„ธ๋Œ€๋ฅผ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋ฉฐ ๊ด€๋ฆฌํ•œ๋‹ค.

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

V8์˜ ๊ฐ์ฒด ์ €์žฅ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๋‹ค.

์‹ ์„ธ๋Œ€(New Space)๊ฐ€ ๋ฐ”๋กœ ์ƒˆ๋กœ ํ• ๋‹น๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค. ์ผ๋‹จ ๋ญ”๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋Œ€๋ถ€๋ถ„ ์ €๊ธฐ๋กœ ๊ฐ„๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ ์„ธ๋Œ€์—์„œ ๋งˆ์ด๋„ˆ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด 2๋ฒˆ ๋ฐœ์ƒํ•  ๋™์•ˆ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ ๊ตฌ์„ธ๋Œ€(Old space)๋กœ ์ด๋™๋œ๋‹ค.

๋Œ€์ถฉ ์ „์ฒด์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ํ๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
๊ฐ๊ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์„ธ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ณง ๋‹ค๋ฃจ๊ฒ ๋‹ค.




Mark and Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ˜„๋Œ€ GC์˜ ๊ทผ๊ฐ„์ด ๋œ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

1960๋…„์— ๋ฆฌ์Šต์˜ ์ฐฝ์‹œ์ž ๋งค์นด์‹œ๊ฐ€ ๋งŒ๋“ค์—ˆ๋‹ค.

Java์—์„œ๋„ ๋ช‡๋ช‡ GC ๊ธฐ๋ฒ•์€ ๋งˆํฌ์•ค ์Šค์œ• ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ , Go, C#, V8 ๋“ฑ์€ ์ง€๊ธˆ๋„ ์ด๊ฑธ ์“ด๋‹ค

V8์—์„œ๋Š” ๊ตฌ์„ธ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ GC(Major GC)์— Mark and Sweep์„ ์‚ฌ์šฉํ•œ๋‹ค.
๋” ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด ๋ณ€์ข…์ธ Concurrent Mark and Sweep(CMS)๊ณผ Mark and Compact๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธด ํ•˜๋‹ค. ๊ทธ๊ฑด ๋‹ค์Œ ์„น์…˜์—์„œ ์–ธ๊ธ‰ํ•˜๊ฒ ๋‹ค.

https://m.blog.naver.com/sssang97/221567636644

๋งˆํฌ์•ค์Šค์œ•์€ ์ดˆ๊ธฐ์— ๋‚˜์˜จ ๋ฐฉ๋ฒ•๋ก ์ธ๋งŒํผ ๊ตฌ์กฐ๊ฐ€ ๋งค์šฐ ๋‹จ์ˆœํ•˜๋‹ค.

๋ฃจํŠธ๊ฐ์ฒด๋“ค๋ถ€ํ„ฐ ํ•œ๋ฐ”ํ€ด ๋บ‘ ๋Œ๋ฉด์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ , ์ฐธ์กฐ๋˜์ง€ ์•Š์€๊ฑธ ์‹น ์ง€์›Œ๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋‹จ์ ์ด ๋งŽ์•„์„œ Java ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทผ๋ž˜์— ์ด ๊ตฌ์กฐ๋ฅผ ๊ฑฐ์˜ ๋ฒ„๋ ธ๋‹ค.

๋งค GC ํƒ€์ž„๋งˆ๋‹ค ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํ’€์Šค์บ”ํ•˜๋ฉด์„œ ์ฐ๊ณ , ๋˜ ํ’€์Šค์บ”ํ•˜๋ฉด์„œ ์ง€์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๋ฉด ๊ฐ๋‹น์ด ์ž˜ ์•ˆ๋œ๋‹ค.

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




Mark and Compact

Mark and Compact๋Š” Mark and Sweep์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ…์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•œ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.

Edward Lueders๋ผ๋Š” ์‚ฌ๋žŒ์ด 1974๋…„์— ๊ณ ์•ˆํ–ˆ๋‹ค.

์ „๋ฐ˜์ ์ธ ๋™์ž‘๋ฐฉ์‹์€ ๋งˆํฌ์•ค์Šค์œ•๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค.

์ฐจ์ด์ ์€ ๋งˆํฌ ํ›„์— ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์‚ญ์ œํ• ๋•Œ, ์‚ญ์ œ๋งŒ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒ์กดํ•œ ๊ฐ์ฒด๋“ค์„ ํ•œ์ชฝ์œผ๋กœ ์˜ˆ์˜๊ฒŒ ๋ชจ์€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ํŒŒํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

๋ฐ”๋กœ ์ด๋†ˆ์ด ์ด๋ฅธ๋ฐ” Stop the World๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์ฃผ๋ฒ”์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ด๋™์€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•œ ์ฑ„๋กœ ์ด๋ค„์ ธ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์˜ˆ์ „์—๋Š” GC๋กœ ์ธํ•œ ์ •์ง€์‹œ๊ฐ„์ด ์ดˆ ๋‹จ์œ„๋กœ ๊ฐ„ ์ ๋„ ์žˆ๋Š”๋ฐ, ์š”์ฆ˜์€ ์ด๋Ÿฐ์ €๋Ÿฐ ์ตœ์ ํ™”๋ฅผ ๋งŽ์ด ํ•ด์„œ 10ms ์ •๋„์˜ ์ง€์—ฐ์ด ๋ณด์žฅ๋œ๋‹ค.




Mark and Copy ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋А๋ ค์ง€๋Š” ๋งˆํฌ์•ค์Šค์œ•์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

1969๋…„์— ๋กœ๋ฒ„ํŠธ ํŽ˜๋‹ˆ์ฒผ์ด๋ž€ ์‚ฌ๋žŒ์ด ๊ณ ์•ˆํ–ˆ๋‹ค.

V8์—์„œ๋Š” ์‹ ์„ธ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ GC(Minor GC)์— Mark and Copy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๊ธฐ๋ฒ•์—์„œ๋Š”, ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 2๊ฐœ๋กœ ์ชผ๊ฐ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•œ๋ฒˆ์— ํ•œ ๋ธ”๋ก๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ํ•œ์ชฝ์ด ๊ฝ‰์ฐจ๋ฉด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋งŒ ๋‹ค๋ฅธ ๋ธ”๋ก์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  ๊ธฐ์กด ๋ธ”๋ก์„ ์‹น ์ง€์›Œ๋ฒ„๋ฆฐ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ์‚ด์•„๋‚จ๋Š”๋‹ค๋ฉด ๋‹ค ์˜ฎ๊ฒจ์•ผํ•˜๋‹ˆ ๋ณต์‚ฌ๋น„์šฉ์ด ๊ฝค ๋“ค์ง€๋งŒ, ๋Œ€๋‹ค์ˆ˜๊ฐ€ ์ฃฝ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋†€๋ผ์šธ ์ •๋„๋กœ ํšจ์œจ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ ์ƒˆ ๋ธ”๋ก์— ์ฐจ๊ณก์ฐจ๊ณก ์˜ˆ์˜๊ฒŒ ์Œ“์•„์„œ ํŒŒํŽธํ™” ๋ฌธ์ œ๋„ ์—†๋‹ค.

๋ฌผ๋ก  ๋‹จ์ ๋„ ๋ช…๋ฐฑํ•˜๋‹ค.

  1. ๊ฐ์ฒด ์ƒ์กด๋ฅ ์ด ๋†’๋‹ค๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค.
    ๊ทธ๋ž˜์„œ V8์—์„œ๋Š” ์ƒ์กด๋ฅ ์ด ๋‚ฎ์„๊ฑฐ๋ผ ์˜ˆ์ƒ๋˜๋Š” ์‹ ์„ธ๋Œ€ ์˜์—ญ์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

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




Orinoco ํ”„๋กœ์ ํŠธ

V8 GC๋Š” ๋งค์šฐ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ๋А๋ฆฐ ์‹œ๊ธฐ๊ฐ€ ์žˆ์—ˆ๋‹ค.
๊ทธ ์ค‘์—์„œ๋„ mark์™€ sweep, compact ๊ณผ์ •๋™์•ˆ Stop the world๋ฅผ ๋„ˆ๋ฌด ์˜ค๋žซ๋™์•ˆ ๋•Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
์ƒํ™ฉ์ด ๋‚˜์˜๋ฉด ๋ฌด๋ ค ์ดˆ๋‹จ์œ„๋กœ๊นŒ์ง€ ์ง€์—ฐ๋๋‹ค.

์ด๊ฑธ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด V8๋Š” GC์— ๋Œ€ํ•œ ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด๊ฒŒ Orinoco๋‹ค.

orinoco์—์„œ ์ง„ํ–‰ํ•œ ์ตœ์ ํ™” ๊ด€์  3๊ฐ€์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

Increment ์ตœ์ ํ™”
GC๋ฅผ ํ•œ๋ฒˆ์— ๋‹ค ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹จ, ๊ทธ๋ƒฅ ์ ๋‹นํžˆ ์ž˜๋ผ์„œ ์ฒœ์ฒœํžˆ ์น˜์šฐ๋Š” ํ˜•ํƒœ๋กœ ๋ฐœ์ „ํ–ˆ๋‹ค.

https://v8.dev/blog/trash-talk
์ด๊ฑด Go GC์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ์ ‘๊ทผ๋ฒ•์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ์— ๊ฑธ๋ฆฌ๋Š” ์ตœ์ข…์ ์ธ ์™„๋ฃŒ ์‹œ๊ฐ„์€ ๋” ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹น์žฅ ๋ฉˆ์ถ”๋Š” ๊ฐ„๊ฒฉ๋“ค ์ž์ฒด๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์ด๊ฒƒ์œผ๋กœ V8 GC๋Š” ์–ด์ง€๊ฐ„ํ•ด์„œ 5-10ms ์ •๋„์˜ ์ •์ง€์‹œ๊ฐ„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
Incrementํ•จ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ V8๋„ GoGC์ฒ˜๋Ÿผ Tri-Color ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

https://v8.dev/blog/concurrent-marking

Parellel ์ฒ˜๋ฆฌ
๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ์Šค๋ ˆ๋“œ๋„ ๋Œ๋ฆด๋งŒํผ ๋Œ๋ฆฐ๋‹ค.

๊ฐ์ž๊ฐ€ GC ์ž‘์—…์„ ์„œ๋กœ ๋ถ„ํ• ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
JS๋Š” ์–ธ์–ด๊ฐ€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ธ๊ฑฐ์ง€, GC ์ž์ฒด์—๋Š” ์ฝ”์–ด๋ฅผ ๊ฝค ํ™œ์šฉํ•œ๋‹ค.

Concurrency
๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ GC ์Šค๋ ˆ๋“œ์™€ ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋А ์ •๋„๋Š” ๋™์‹œ์ ์œผ๋กœ ๋ˆ๋‹ค.

GC๊ฐ€ ๋„๋Š” ๋™์•ˆ ๋ฌด์กฐ๊ฑด ๋ฉ”์ธ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€๋Š” ์•Š๋Š” ๊ฒƒ์ด๋‹ค.
๋ฌผ๋ก  ์™„์ „ํžˆ ์ฐจ๋‹จ์‹œ๊ฐ„์ด ์—†์„ ์ˆ˜๋Š” ์—†๊ณ , ์ฐจ๋‹จ์ด ๋ฐœ์ƒํ•˜๋Š” ์Šคํ…์ด ์žˆ๊ณ  ์ž ๊น๋™์•ˆ ์ฐจ๋‹จํ•˜๋Š” ์Šคํ…์ด ์žˆ๊ณ  ๊ทธ๋Ÿฐ๊ฑฐ๋‹ค.
๊ทธ๋ž˜์„œ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์‚ฌ์‹ค ์ € ๊ทธ๋ฆผ์€ ํ‹€๋ ธ๋‹ค.




Idle time GC ์Šค์ผ€์ค„๋ง (๋ธŒ๋ผ์šฐ์ €)

Node.js๋ฅผ ์ œ์™ธํ•˜๊ณ , ํฌ๋กฌ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €์— ํ•ด๋‹น๋˜๋Š” ์ด์•ผ๊ธฐ๋‹ค.

์›น๊ฒŒ์ž„์ด๋‚˜ ๋ฏธ๋””์–ด ์ฒ˜๋ฆฌ ๊ฐ™์€ ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ ๋‹ค๋ฉด ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜์ค€์˜ ์ง€์—ฐ ์‹œ๊ฐ„๋„ ์น˜๋ช…์ ์œผ๋กœ ๋‹ค๊ฐ€์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์œ„์—์„œ V8 GC์˜ ํ‰๊ท  ์ •์ง€์‹œ๊ฐ„์ด 5-10ms ์ •๋„๋ผ๊ณ  ํ–ˆ์ง€๋งŒ, ์ตœ์•…์˜ ์ƒํ™ฉ์—๋Š” ์ •์ง€์‹œ๊ฐ„์ด 100ms ์ˆ˜์ค€์œผ๋กœ ์ง€์—ฐ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทผ๋ฐ ํฌ๋กฌ์˜ ๋ Œ๋”๋ง ์ฃผ๊ธฐ๋Š” 60FPS(์ดˆ๋‹น 60๋ฒˆ)์ด๋‹ค.
16.6ms ์ด๋‚ด์— ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋Š”, ๋ Œ๋”๋ง ์‹œ๊ธฐ์— GC๊ฐ€ ๋Œ์•„์„œ ๋ฆฌ์†Œ์‹œ๋ฅผ ์ ์œ ํ•˜๊ณ  ๋งˆ๊ฐ ์‹œ๊ฐ„์ธ 16.6ms ์ด๋‚ด์— ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋‹ค.
์ด๋Ÿฌ๋ฉด ํ•ด๋‹น ํ”„๋ ˆ์ž„์ด ๊ฒฐ๊ตญ ์‚ญ์ œ๋˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข‹์ง€ ์•Š์€ ๊ฒฝํ—˜์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
์ด ํ˜„์ƒ์„ jank๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

V8์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ข€ ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
ํฌ๋กฌ์˜ ์Šค์ผ€์ค„๋Ÿฌ๊นŒ์ง€ ํ™œ์šฉํ•ด์„œ ํ™”๋ฉด์— ํ”„๋ ˆ์ž„์„ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š” idle ํƒ€์ž„ ๋‚ด์— GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

https://queue.acm.org/detail.cfm?id=2977741
์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ ˆ์ž„ ๋ Œ๋”๋ง ๊ฐ„๊ฒฉ ๋‚ด์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ , 16ms๊ฐ€ ๋„˜๋”๋ผ๋„ ์‹ค์งˆ์ ์ธ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด GC๋ฅผ ์ข€ ๋” ์˜ค๋ž˜ ๋Œ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.
๊ทธ๋ž˜๋„ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ณดํ†ต 50ms๋ฅผ ์ƒํ•œ์„ ์œผ๋กœ ๋‘๋Š” ํŽธ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ V8์€ jank ๋ฌธ์ œ๋ฅผ ๊ฝค ํ•ด์†Œํ•œ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ 70% ์ •๋„์˜ GC๋Š” ํ”„๋ ˆ์ž„ ๋ Œ๋”๋ง ์‚ฌ์ด์˜ Idle ํƒ€์ž„์— ์ฒ˜๋ฆฌ๋œ๋‹ค.



์ฐธ์กฐ
https://fe-developers.kakaoent.com/2022/220519-garbage-collection/
https://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection
https://v8.dev/blog/trash-talk
https://queue.acm.org/detail.cfm?id=2977741