GC ์์๋ณด๊ธฐ
https://www.youtube.com/watch?v=FMUpVA0Vvjw&list=LL&index=73&t=12s
์ฐ์ํ ํ ํฌ์ฝ์ค ์กฐ์๋์ ์์์ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์
(Garbage Collection, GC)
GC๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค. JVM์ ํ ์์ญ์์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์ค ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ์ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ด๋ค.
๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐํ์์ ์ฌ์ฉ๋๋ Heap ์์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
GC๊ฐ ํ ์์ญ์ ๊ฐ์ฒด๋ค ์ค์์ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ์ฐพ์๋ด์ด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํจ์ผ๋ก์จ, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ ๋์ธ๋ค.
C, C++์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ ํ๋๋ฐ, ์ด๋ ๊ฒ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๋ค.
ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ โMemory Leakโ์ด ๋ฐ์ํ๊ธฐ๋ ํ๋ค.
Java์ JS ๊ฐ์ ์ธ์ด์์๋ GC๊ฐ ์์์ ํด์ค๋ค.
์ฅ์ :
๊ฐ๋ฐ์์ ์ค์๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง์ ์ ์๋ค.
ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํด์ ํ๋ ์ด์ค ํด์ ๋ฅผ ๋ง์ ์ ์๋ค.
๋จ์ :
์ด๋ค ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ์ ๋์์ด ๋ ์ง ๊ฒ์ฌํ๊ณ ํด์ ํ๋ ์ผ์ ์ค๋ฒํค๋์ด๋ค.
GC ์์ ์ ์์ ์ค๋ฒํค๋
GC์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ์ธ์ ๋ฐ์ํ๋์ง ๊ฐ๋ฐ์๊ฐ ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
GC ์๊ณ ๋ฆฌ์ฆ
GC๋ ์ด๋ป๊ฒ ํด์ ํ ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ํ๋จํ ์ ์์๊น? ๐ค
Root space
root space๋ ์คํ ๋ณ์, ์ ์ญ ๋ณ์ ๋ฑ, Heap ์์ญ์ ์ฐธ์กฐํ๋ ๋ณ์๋ฅผ ๋ด์ ๋ณ์์ด๋ค.
1. Reference Counting
Reference Counting์ Heap ์์ญ์ ์ ์ธ๋ ๊ฐ์ฒด๋ค์ด ๊ฐ๊ฐ reference count๋ผ๋ ๋ณ๋์ ์ซ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
reference count๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํด๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ์๋ฏธํ๋ค.
์ฆ, count๊ฐ 0์ด ๋๋ค๋ฉด GC์ ๋์์ด ๋๋ค๋ ๊ฒ์ด๋ค.
Reference Counting์ ์ํ ์ฐธ์กฐ๋ผ๋ ๋ฌธ์ ์ ์ด ์๋ค.

Root Space์์ Heap space์ ์ ๊ทผ์ ๋ชจ๋ ๋์ด๋ฒ๋ฆฌ๋ฉด, ๋ ธ๋์ ๊ณ ๋ฆฌ ์์ ๊ฐ์ฒด๋ค์ ์๋ก๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ Reference Count๊ฐ 1๋ก ์ ์ง ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋์ง ๋ชปํ๊ณ Memory Leak์ด ๋ฐ์ํ๋ค.
2. Mark And Sweep

Mark and sweep์ Reference Counting์ ์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
root์์ ๋ถํฐ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ฅผ ํด์ ์ ๊ธฐ์ค์ผ๋ก ์ผ๋๋ค.

root๋ถํฐ ๊ทธ๋ํ ์ํ๋ฅผ ํตํด์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค์ ์ฐพ์๋ด๊ณ (Mark)
์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฐ์ฒด๋ค์ GC์ ๋์์ด๋ค. (Sweep)
root๋ก๋ถํฐ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ Reachable, ์ฐ๊ฒฐ๋์ง ์์๋ค๋ฉด UnReachable ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
sweep ์ดํ ๋ถ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๋ฆฌ๋๋๋ฐ, ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ๋ง๋
Compaction์ด๋ผ๊ณ ํ๋ค.Mark and sweep์์ Compaction์ ํ์ ๊ณผ์ ์ ์๋๋ค.
Mark and sweep์ ์ฌ์ฉํ๋ฉด ์ํ ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ค๋ ๋ชจ๋ ์ง์ธ ์ ์๋ค.
Java์ JS๊ฐ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๋จ์ :
reference count์ ๋ฌ๋ฆฌ ์๋์ ์ผ๋ก GC๋ฅผ ์คํ์์ผ์ผ ํ๋ค.
์ด๋ ์์ ์ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด GC์๊ฒ ์ปดํจํฐ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ GC ์คํ์ด ๋ณํ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ฑ์ ์ ์งํ๋ฉด์ ํจ์จ์ ์ผ๋ก GC๋ฅผ ์คํํ๋ ๊ฒ์ด ์ด๋ ค์ด ์ต์ ํ ์์ ์ด๋ค.
JVM์ ๊ตฌ์กฐ (Java 8 ๊ธฐ์ค)

JVM์ ํฌ๊ฒ 3๊ฐ์ง ์์ญ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Class Loader
๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฝ๊ณ , ํด๋์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ Heap/Method ์์ญ์ ์ ์ฅํ๋ ํด๋์ค ๋ก๋
JVM Memory
์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ ๋ณด๊ฐ ์ฌ๋ผ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ
Execution Engine
byte code๋ฅผ native code๋ก ๋ณํํ๊ณ GC๋ฅผ ์คํํ๋ ์คํ ์์ง

JVM Memory๋ OS๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ ํ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด์ ๊ด๋ฆฌํ๋ค.
์ด 5๊ฐ์ง ์์ญ์ผ๋ก ๋๋๊ณ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ :
Method, Heap Area๊ฐ ์ค๋ ๋๋ง๋ค ๊ณ ์ ํ๊ฒ ์์ฑ ํ๋ ์์ญ
Stack: ์ค๋ ๋ ์ข ๋ฃ ์ ์๋ฉธPC Register, Native Method Stack
Method Area
๋ฉํ ๋ฐ์ดํฐ์ฒ๋ผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ฉ์๋์ ์ฝ๋๋ฅผ ์ ์ฅํ๋ค.
Heap
์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค ์์ฑ๋๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ค.
GC์ ์ํด ๊ด๋ฆฌ๋๋ ์์ญ
Stack
๋ฉ์๋ ํธ์ถ์ ์คํ ํ๋ ์์ด๋ผ๋ ๋ธ๋ก์ผ๋ก ์์ผ๋ฉฐ ๋ก์ปฌ ๋ณ์, ์ค๊ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋๋ ์์ญ
PC Register
์ฐ๋ ๋๊ฐ ํ์ฌ ์คํํ ์คํ ํ๋ ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
Native Method Stack
C/C++ ๋ฑ์ Low level ์ฝ๋๋ฅผ ์คํํ๋ Stack ์ด๋ค.
Root Space

JVM์ GC๋ ๊ธฐ๋ณธ์ผ๋ก Mark and sweep ๋ฐฉ์์ผ๋ก ๋์ํ๋๋ฐ, root์์ ๋ถํฐ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๊ฐ ํด์ ์ ๊ธฐ์ค์ด๋ค.
JVM์ root space๋ JVM ๋ฉ๋ชจ๋ฆฌ์ Stack์ ๋ก์ปฌ ๋ณ์, Method ์์ญ์ ์ ์ฅ๋ static ๋ณ์, Native Method Stack์ C/C++๋ก ์์ฑ๋ JNI ์ฐธ์กฐ์ด๋ค.
Mark and sweep์ ํน์ง ์ค ์๋์ ์ผ๋ก GC๋ฅผ ์คํ์์ผ์ผ ํ๋ ํน์ง์ด ์๋ค. ๋ฐ๋ผ์ GC์ ์คํ ํ์ด๋ฐ์ ์๊ธฐ ์ํด์๋ Heap ์์ญ์ ๋ ์์์ผ ํ๋ค.
JVM - Heap

JVM์ ํ ์์ญ์ ํฌ๊ฒ Young Generation ๊ณผ Old Generation ์ผ๋ก ๋๋๋ค.
Young ์์ ๋ฐ์ํ๋ GC = minor gc
minor gc๋ Eden / survival 0 / survival 1 ์์ญ์ผ๋ก ๋๋๋ค.
Old ์์ ๋ฐ์ํ๋ Gc = major gc
Eden : ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๋ค์ด ํ ๋น๋๋ ์์ญ
Survival : minor gc์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋ ์์ญ
Survival 0 ๋๋ 1 ์ค ํ๋๋ ๋ฐ๋์ ๋น์ด ์์ด์ผ ํ๋ค๋ ํน์ง์ด ์๋ค.
Youn Generation & Old Generation ๋ฐ์ ๊ณผ์

๋ธ๋ก๋ค์ ์๋ก์ด ๊ฐ์ฒด์ด๊ณ , ์ด๊ฒ์ด ๊ณ์ ์์ฑ๋๋ฉด Eden ์์ญ์ด ๊ฐ๋ ์ฐฐ ๊ฒ์ด๋ค.
์ด ๋, minor GC๊ฐ ์ผ์ด๋๋ค. โ Mark & Sweep์ด ์งํ๋๋ค.
Root๋ก๋ถํฐ Reachable์ด๋ผ๊ณ ํ๋จ๋ ๊ฐ์ฒด๋ค์ Survival 0 ์์ญ์ผ๋ก ์ฎ๊ฒจ์ง๊ณ , ์ฎ๊ฒจ์ง ๊ฐ์ฒด์ ์ซ์๊ฐ 0 โ 1๋ก ์ฆ๊ฐํ๋ค. ํด๋น ์ซ์๋
age-bit๋ฅผ ์๋ฏธํ๋ค.age-bit: Minor GC์์ ์ด์๋จ์ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํ๋ค.

์๊ฐ์ด ํ๋ฌ์ Eden ์์ญ์ด ๋ ๊ฐ๋์ฐจ๊ณ , Minor GC๊ฐ ๋ฐ์ํ๋ค.
Rechable๋ก ํ๋จ๋ ๊ฐ์ฒด๋ค์ Survival 0 โ 1๋ก ์ด๋ํ๋ค.

์ ๊ณผ์ ์ด ๊ณ์ ๋ฐ๋ณต๋๊ณ , Suvival 0 ์์ญ์ผ๋ก ๋์ด์จ ๊ฐ์ฒด ์ค ํ๋์
age-bit๊ฐ 3์ด ๋๋ฉด,
JVM GC์์๋ ์ผ์ ์์ค์ age-bit๋ฅผ ๋์ด๊ฐ๋ฉด ์ค๋๋๋ก ์ฐธ์กฐ ๋ ๊ฐ์ฒด๋ผ๊ณ ํ๋จํ์ฌ ํด๋น ๊ฐ์ฒด๋ฅผ Old Generation์ ๋๊ฒจ์ค๋ค. ์ด ๊ณผ์ ์ ๐ฅ
Promotion๐ฅ ์ด๋ผ๊ณ ํ๋ค.

์๊ฐ์ด ์ง๋๋ฉด Old Generation๋ ๊ฐ๋ ์ฑ์์งํ ๋ฐ, ์ด๋
Major GC๊ฐ ๋ฐ์ํ๋ฉด์ ํ์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์์ค๋ค. Major GC๋ Minor GC๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์ผ๋ฐ์ ์ผ๋ก Old Generation์ Young Generation๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ํฌ๊ฒ ์ก๋๋ค.
๋ํดํธ ๊ฐ์ด Young Gen:Old Gen์ด 1:3์ด๋ค. ๋ฐ๋ผ์ Old Generation์ ๊ฐ์ฒด์ ๊ฐฏ์๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ GC ์๊ฐ์ด ๊ธธ๋ค. GC์ ์๊ฐ์ด ๊ธธ๋ค๋ ๊ฒ์ STW๊ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ์๋ฆฌ์ด๋ค. ๋ํ, Old Generation์ ๋ณ๋์ Survivor Space๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ ์ ๊ฒฝ์จ์ผ ํ๋ค.
๐ค ๊ทธ๋ผ ์ young๊ณผ old๋ก ๋๋ ๋จ์๊น?
GC ์ค๊ณ์๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํด๋ณด๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด ์๋ช ์ด ์งง๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
๋ฐ๋ผ์ ์ต๋ํ Young Genration ์์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
Minor GC๊ฐ Major GC๋ณด๋ค GC ์๊ฐ์ด ๋น ๋ฅด๋ค.
GC ๊ฐ๋จ ์์ฝ(Minor, Major, Full)
Minor GC
Young Generation์ Eden ์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉด Minor GC๊ฐ ๋ฐ์ํ๊ณ , ์ด์์๋ ๊ฐ์ฒด๋ค์ Survivor ์์ญ์ผ๋ก ๋ณต์ฌํ๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ ์ ๊ฑฐ๋๋ค.
Minor GC๋ ๋น๊ต์ ๋น ๋ฅด๊ฒ ์ํ๋์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ฉ์ถ๊ฒ ํ๋ STW ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. (์ด ์ค๋จ ์๊ฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์งง๋ค.)
Major GC
Old Generation์ Young์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์ด๋ํ๋ ์์ญ์ด๋ค. (์๋์ ์ผ๋ก ์๋ช ์ด ๊ธด ๊ฐ์ฒด๋ค)
Old Generation์ด ๊ฝ ์ฐจ๋ฉด Major GC๊ฐ ๋ฐ์ํ๊ณ STW ์ด๋ฒคํธ๋ฅผ ์ ๋ฐํ๋ค.
Tenured ๊ณต๊ฐ์ ์ฒญ์ํ๋ค.
Tenured๋ JVM์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ Old Generation์ ์๋ฏธํ๋ค.
Full GC
Young, Tenured(์ ์ฒด ํ) ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ค์ ๋ชจ๋ ์ ๋ฆฌํ๋ค.
์ค๋ ๋ ์ค๋จ ์๊ฐ์ด ๋งค์ฐ ๊ธธ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค ์ ์๋ค.
JVM GC ๋ฐฉ์
Serial GC
ํ๋์ ์ฐ๋ ๋๋ก GC ์คํํ๋ค. ํ๋์ ์ค๋ ๋๋ง ์ฌ์ฉํ๋ค๋ณด๋ Stop The World ์๊ฐ์ด ๊ธธ๋ค.
์ฑ๊ธ ์ค๋ ๋ ํ๊ฒฝ์ด๋ Heap์ด ๋งค์ฐ์์ ๋ ์ฌ์ฉ
Parallel GC
์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก GC๋ฅผ ์คํํ๋ค. ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉฐ Java 8์ ๊ธฐ๋ณธ GC ๋ฐฉ์์ด๋ค.
CMS GC (Concurrent Mark Sweep)
STW ์ต์ํ๋ฅผ ์ํด ๊ณ ์๋ ๋ฐฉ์์ด๋ค. GC ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์์ ์คํํ๋ค.
๋๋ถ๋ถ GC ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋์์ ์ํํ์ฌ STW๋ฅผ ์ต์ํ ์ํด
๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ , Mark Sweep ๊ณผ์ ์ดํ ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ํด๊ฒฐํ๋ Compaction์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง ์๋๋ค.
G1 GC์ ๋์ฒด๋์์
G1 GC (Garbage First)
G1 GC๋ Heap ์์ญ์ ์ ๋ฐฉ์๋ค๊ณผ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ค.
Heap์ ์ผ์ ํฌ๊ธฐ์ Region์ผ๋ก ์๊ฒ ๋๋์ด ์ด๋ค ์์ญ์ Young Generation, ์ด๋ค ์์ญ์ Old Generation์ผ๋ก ํ์ฉํ๋ค. ๋ฐํ์์ G1 GC๊ฐ ์์ญ๋ณ Region ๊ฐ์๋ฅผ ํ๋ํ๋ค.
Java 9 ์ด์ ๋ถํฐ๋ G1 GC๋ฅผ ๊ธฐ๋ณธ GC ์คํ๋ฐฉ์์ผ๋ก ํ๋ค.
GC ํ๋ ๋ชฉํ
Old Generation์ผ๋ก ๋์ด๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ต์ํ
Major GC ์๊ฐ์ ์งง๊ฒ ์ ์ง
Major GC๋ฅผ ์ ๊ฒ ๋ฐ์ํ๊ฑฐ๋ ๋น ๋ฅธ ์๊ฐ๋ด์ ๋๋ด๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
ํ์ ๋ Heap ์์ญ์ YG, OG๋ฅผ ๊ฐ๊ฐ ์ผ๋ง๋งํผ ํ ๋นํ๋ ๊ฒ์ด ์ ๋นํ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค.
Last updated