๐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ญํ
์๋ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ณตํต์ ์ผ๋ก ๋ ๊ฐ์ง ์์ ์ ์ํํ๋ค.
- ํ(Heap)๋ด์ ๊ฐ์ฒด ์ค์์ ๊ฐ๋น์ง(Garbage)๋ฅผ ์ฐพ์๋ธ๋ค.
- ์ฐพ์๋ธ ๊ฐ๋น์ง๋ฅผ ์ฒ๋ฆฌํด์ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
๐ Reachability
GC๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋น์ง์ธ์ง ํ๋ณํ๊ธฐ ์ํด reachability๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. ๋ง์ฝ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ์ค(์ ํจํ ์ฐธ์กฐ)์ด๋ผ๋ฉด reachable, ์ฌ์ฉ์ค์ด์ง ์์ผ๋ฉด unreachable๋ก ๊ตฌ๋ณํ๋ค. ์ฐธ์กฐ๋ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๊ณ ๊ฐ์ฒด๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ๋์ด ์๊ธฐ์ ์ฐธ์กฐ ์ฌ์ฌ์ ์ด๋ฃฌ๋ค. ์ด๋, ์ ํจํ ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํด ์ต์ด์ ์ฐธ์กฐ๋ฅผ ์ฐพ๋๋ค. ์ด๋ฅผ root set์ด๋ผ๊ณ ํ๋ค.
ํ์ ์๋ ๊ฐ์ฒด๋ค์ ๋ํ ์ฐธ์กฐ๋ 4๊ฐ์ง ์ค ํ๋์ด๋ค.
- ํ ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ ์ฐธ์กฐ
- Java ์คํ (Java ๋ฉ์๋ ์คํ ์์ ์ฌ์ฉํ๋ ์ง์ญ ๋ณ์์ ํ๋ฆฌ๋ฏธํฐ๋ค์ ์ํ ์ฐธ์กฐ)
- ๋ค์ดํฐ๋ธ ์คํ
- ๋ฉ์๋ ์์ญ์ ์ ์ ๋ณ์์ ์ํ ์ฐธ์กฐ
์ด ์ค ํ ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ ์ฐธ์กฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง 3๊ฐ๊ฐ root set์ด๋ฉฐ, reachability๋ฅผ ํ๋จํ๋ ๊ธฐ์ค์ด ๋๋ค.
์ ๊ทธ๋ฆผ์์ root set์ผ๋ก๋ถํฐ ์์ํ ์ฐธ์กฐ ์ฌ์ฌ์ reachableํ ๊ฐ์ฒด์ด๊ณ , ๋๋จธ์ง๋ unreachable ๊ฐ์ฒด๋ก GC์ ๋์์ด ๋๋ค. reachable ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ผ๋ ๋ค๋ฅธ reachable ๊ฐ์ฒด๊ฐ ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค๋ฉด ์ด ๊ฐ์ฒด๋ unreachable ๊ฐ์ฒด์ด๋ค.
๐๏ธ Strong Reference
์ผ๋ฐ์ ์ผ๋ก java.lang.ref ํจํค์ง์ ์๋ ๋ ํผ๋ฐ์ค ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ด๋ ์ผ๋ฐ์ ์ธ ์ฐธ์กฐ์ด๋ฉฐ, ์ด๋ฅผ strong reference๋ผ๊ณ ๋ถ๋ฅธ๋ค.
MyNumber number = new MyNumber();
์ด ์ฒ๋ผ number๋ผ๋ ๋ณ์๊ฐ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํํ์ด๋ฉฐ, ์ด๋ฐ ๊ฒฝ์ฐ GC์ ๋์์ด ๋์ง ์๋๋ค.
๐๏ธ Soft Reference
GC๊ฐ ๋์ํ๋ ๊ท์น์ JVM๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฅด์ง๋ง softly-reachable ๊ฐ์ฒด๋ OOM(Out of Memory)๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ํ์๋๋ ๊ฒ์ ๋ณด์ฅํ๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ์ค์ํ ์์์ธ ์บ์ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
MyNumber number = new MyNumber();
SoftReference<MyNumber> numberRef = new SoftReference<>(number);
๐๏ธ Weak Reference
Weak Reference Object๋ strong reference์ soft reference๊ฐ ๊ฐ๋ฆฌํค๊ณ ์์ง ์์ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ฉฐ, ์ด ๊ฐ์ฒด๋ weak reference๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ง ๋๋ฌํ ์ ์๋ค. Soft References๋ ์ฐธ์กฐ๊ฐ ์ดํ์ ๋ค์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด ์ฌ์ฉ๋์ง๋ง, weak reference๋ ์ฐธ์กฐ๊ฐ ์กด์ฌํ ๋๋ง ์กด์ฌํ๋ค.
WeakReference<MyNumber> numberRef = new WeakReference<MyNumber>(new MyNumber());
MyNumber number = numberRef.get();
์ฌ๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ null๋ก ๋ฐ๊พธ๋ฉด weakreference๋ง ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๊ณ ์ด ๋ gc์ ๋์์ด ๋๋ค.
number = null;
[์ฐธ์กฐ]