ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ ๋ฐฉ์
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 6. 20. 21:23์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
JavaScript, Python, Java์ ๊ฐ์ ํ์ด ๋ ๋ฒจ ์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค๋๋ค.
๋ฐ๋ฉด, C์ธ์ด ๊ฐ์ ๋ก์ฐ ๋ ๋ฒจ ์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ํด mallock()๊ณผ free()๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
*๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection)
์ธ๋ชจ ์์ด์ง ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ ํ๋ ๊ฒ
- ์ฅ์ : ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ฒฝํ๊ฒ ํ ํ์๊ฐ ์๋ค.
- ๋จ์ : ์ธ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์งํ๋ ์ง ์์ธกํ๊ธฐ ์ด๋ ต๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์ํ๋ ์๊ฐ์ด ๋ ๋ค.
๋ฉ๋ชจ๋ฆฌ ์์กด์ฃผ๊ธฐ
๋ฉ๋ชจ๋ฆฌ ์์กด์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ด๊ณ์์ด ๋น์ทํฉ๋๋ค.
1. ํ์ํ ๋ ํ ๋น
2. ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ(์ฝ๊ธฐ, ์ฐ๊ธฐ)
3. ํด๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ ์์ด์ง๋ฉด ํด์
์ด๋, 1,3์ ์๋ฌต์ ์ผ๋ก ์ํํจ์ ์์ด ํ์ด ๋ ๋ฒจ ์ธ์ด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ
1. Primitive Type
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ ํ์ ์ ์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ, null, undefined, ์ฌ๋ณผ ์ด๋ ๊ฒ 6๊ฐ์ง๊ฐ ์์
- ์์ ํ์ ๋ฐ์ดํฐ๋ ๋ถ๋ณํ๋ ๋ฐ์ดํฐ๋ก, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ฒ ํ ๋น๋ฐ์ผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์
let num // undefined
num = 80
num = 100
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ ์ฌํ ๋นํ๋ฉด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ๊ฐ์ ๋ฃ๊ณ , ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ฏ๋ก
์ด์ ๊ฐ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์ด ๋ฉ๋๋ค.
(** C์์๋ ๋ณ์์ ๊ฐ์ ์ฌํ ๋นํ๋ฉด, ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์์ ๊ฐ์ด ๋ฐ๋ก ๋ณ๊ฒฝ๋จ)
2. Object Type
- ์์ ํ์ ์ ์ ์ธํ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด ํ์ ์ผ๋ก, ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ๋ฑ์ด ๋ชจ๋ ๊ฐ์ฒด ํ์
- ๊ฐ์ฒด ํ์ ์ ๋ณ์์ ํ ๋นํ๋ฉด, ๋ณ์์๋ ์ค์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋จ
์๋์ ๊ฐ์ person ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
const person = {
name: 'Lee'
}
// ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ฐ์ฒด
const p1 = person
p1 === person // true
// ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด
const p2 = { ...person }
p2 === pserson // false
- p1์ฒ๋ผ ๊ฐ์ฒด ํ์ ์ ๋ด์ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
- p2์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๋ณ์์ ํ ๋นํ๋ฉด, ๊ฐ์ฒด์ ๊ตฌ์ฑ์ ๊ฐ์ ์ ์์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด์
์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํตํ๋ ๊ฒ์ผ๋ก, ์ผ์ข ์ ํฌ์ธํฐ ์ญํ ์ ํฉ๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ํ๋๋ ์์ผ๋ฉด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋ฉ๋๋ค.
์๋ฐ์คํธ๋ฆฝํธ์์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
1. ๊ฐ ์ด๊ธฐํ
- ํ๋ก๊ทธ๋๋จธ๋ฅผ ํ ๋น ๋ฌธ์ ๋ก๋ถํฐ ์์ ๋กญ๊ฒ ํ๊ธฐ ์ํด์, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ ์ ์ธํ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค.
2. ํจ์ ํธ์ถ์ ํตํ ํ ๋น
- ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๊ธฐ๋ ํฉ๋๋ค.
- ๋ฉ์๋์์๋ ์๋ก์ด ๊ฐ์ด๋ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ ๊ฒ ํ ๋น ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ฑฐ๋ ์ฝ๋๊ฒ์ ๊ฐ์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.
์์์ ์ดํด๋ณด์๋ ๊ฒ์ฒ๋ผ, ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ด์ ํ์ ์์ ๋ ํด์ ๋ฅผ ํด์ผํ๋๋ฐ,
์ ์ ํ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ์ง ๋ชปํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋์ง ์๊ฒ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ชจ๋ํฐ๋งํ๊ณ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ธ๋ก์ด ๋ ์ด์ ํ์ํ์ง ์์ ์์ ์ ํ์ธํ์ฌ ํ์ํ๋ ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ผ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํ์์ ํ์ฉํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋น์ง ์ปฌ๋ ์ (์๊ณ ๋ฆฌ์ฆ)
1. Reference-Counting
์ฐธ์กฐ ๊ฐ์๋ฅผ ์นด์ดํ ํ์ฌ ์ฐธ์กฐ๊ฐ ํ๋๋ ์์ผ๋ฉด ๊ฐ๋น์ง๋ก ํ๋จํ๋ ๋ฐฉ๋ฒ
ํ๊ณ : ์ํ ์ฐธ์กฐ
- ๋๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ก ์ฐธ์กฐํ๋ฉด ์ํ ๊ตฌ์กฐ๊ฐ ์์ฑ๋์ด, ๊ฐ๋น์ง๋ก ์ธ์ง๋์ง ์์
- IE 6,7 ๋ฒ์ ์์๋ ์นด์ดํ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ํ ์ฐธ์กฐ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒฝ์ฐ๋ฉฐ ๊ฐ๋ฐํ๋ ๋ถํธํจ์ด ์์์ต๋๋ค.
2. Mark-and-Sweep
๊ฐ๋น์ง๋ฅผ "๋ฟ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ"๋ก ์ ์ํฉ๋๋ค.
roots ๋ผ๋ ์ ์ญ๋ณ์์ ์งํฉ๋ถํฐ ์์ํ์ฌ, roots๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด -> ๊ทธ ์์๋ค์ด ์ฐธ์ํ๋ ๊ฐ์ฒด -> ...
์ด๋ฐ์์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ค์ ์ ๋ณํ๊ณ , ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ค์ ๊ฐ๋น์ง๋ก ํ๋จํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์คํ ์ปจํ ์คํธ๊ฐ ์๋ฉธํ๋ ์๊ฐ, ์ ๊ทผํ๊ธฐ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ํ ์ฐธ์กฐ๋ ๋ฐ์ํ์ง ์์ต๋๋ค.
- 2012๋ ๋ถํฐ ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ค์ด Mark-and-Sweep ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
Mark-and-Sweep์ 3๊ฐ์ง ์ํ
- White : ์์ง ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ์ง ๋ชปํ ์ํ
- Gray : ๊ฐ๋ฐ์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ์ผ๋, ํด๋น ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ค์ ํ์ํ์ง ๋ชปํ ์ํ
- Black : ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ๊ณ , ํด๋น ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ค๋ ํ์ ์๋ฃํ ์ํ
Mark-and-Sweep์ ๋์ ๊ณผ์
1. Marking
- roots๋ฅผ ๋ชจ๋ ํ์์ผ๋ก ๋งํนํ๊ณ , Deque์ pushํจ
- Deque์์ pop frontํ์ฌ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ด ๊ฒ์์์ผ๋ก ๋งํน
- ๊ฒ์์์ผ๋ก ๋งํน๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ค์ ํ์์ผ๋ก ๋งํนํ๊ณ , push front
- Deque๊ฐ ์์ ํ ๋น ๋๊น์ง ์ด๋ฅผ ๋ฐ๋ณต
- ์ต์ข ์ ์ผ๋ก ๊ฒ์์๊ณผ ํฐ์์ผ๋ก ๋ถ๋ฅ๋๊ณ Deque๋ ์์ ํ ๋น
2) Sweep
- ํ์์ผ๋ก ๋งํน๋ ๊ฐ์ฒด๋ค์ ๊ฐ๋น์ง๋ก ์ธ์ํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์
3) Compact
- ๋ฉ๋ชจ๋ฆฌ์ ํํธํ๊ฐ ์ฌํด์ง์ง ์๋๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณด
https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management
https://velog.io/@bumsu0211/JavaScript-Garbage-Collection
https://eblee-repo.tistory.com/52
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์น ์คํ ๋ฆฌ์ง(localStorage, sessionStorage)๋? (0) | 2022.07.13 |
---|---|
[JavaScript] ์ฐ๋ ๋(Thread) (0) | 2022.06.20 |
- Total
- Today
- Yesterday
- ํ๋ก๊ทธ๋๋จธ์ค
- Baekjoon
- ์๋ฐ
- git
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ์ด์์ฒด์
- ๋ฐฑ์ค javascript
- ํ๋กํผํฐ
- ํ๋กํ ์ฝ
- map
- fp
- JavaScript
- ์ฝ๋ฉํ ์คํธ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- TDD
- ๋ ์์ปฌ ํ๊ฒฝ
- ์ ์ญ ๋ณ์
- ์นด์นด์ค ์ธํด
- ๋ฐฑ์ค
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ์ด๋ถํ์
- ๋คํธ์ํฌ
- ๋์์ธ ํจํด
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค node.js
- ํฌํฌ์ธํฐ
- http
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |