8.1 Java์ ์ฝํ ์ฐธ์กฐ
Java์๋ ์ฌ๋ฌ ์ข ๋ฅ์ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค.
StrongReference ๊ฐ ์์ต๋๋ค . ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋งค์ผ ๋ง๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋งํฌ์ ๋๋ค.
Object object = new Object();//created an object
object = null;//can now be garbage collected
๊ทธ๋ฆฌ๊ณ SoftReference, WeakReference, PhantomReference์ ์ธ ๊ฐ์ง "ํน์" ์ ํ์ ๋งํฌ๊ฐ ์์ต๋๋ค. ์ค์ ๋ก ๋ชจ๋ ์ ํ์ ๋งํฌ ๊ฐ์๋ ๋งํฌ๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ๋ํ GC์ ๋์์ด๋ผ๋ ํ ๊ฐ์ง ์ฐจ์ด์ ๋ง ์์ต๋๋ค. ๋์ค์ ๊ฐ ๋งํฌ ์ ํ์ ์ธ๋ถ ์ฌํญ์ ๋ํด ์์ธํ ์ค๋ช ํ๊ฒ ์ง๋ง ์ง๊ธ์ ๋ค์ ์ง์์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
- SoftReference ๋ ์ํํธ ์ฐธ์กฐ์ ๋๋ค. GC๊ฐ ๊ฐ์ฒด๊ฐ ์ํํธ ์ฐธ์กฐ ์ฒด์ธ์ ํตํด์๋ง ์ก์ธ์คํ ์ ์๋ค๊ณ ํ๋จํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์๋ง๋.
- WeakReference - ์ฝํ ์ฐธ์กฐ. GC์์ ์ฝํ ์ฐธ์กฐ ์ฒด์ธ์ ํตํด์๋ง ๊ฐ์ฒด์ ์ก์ธ์คํ ์ ์๋ค๊ณ ํ๋จ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- PhantomReference ๋ ํฌํ ์ฐธ์กฐ์ ๋๋ค. GC์์ ๊ฐ์ฒด๊ฐ ํฌํ ์ฐธ์กฐ ์ฒด์ธ์ ํตํด์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๊ณ ํ๋จ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. GC๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ ํ.
๋ํ ๋งํฌ ์ ํ์๋ ์ด๋ ์ ๋์ ๋ถ๋๋ฌ์์ด ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
- ์ผ๋ฐ ํ๋ ๋งํฌ๋ ์ฐธ์กฐ ์ ํ์ ๋ณ์์ ๋๋ค. ์ฌ์ฉํ์ง ์๊ฒ ๋๊ธฐ ์ ์ ๊ฐ๋น์ง ์์ง๊ธฐ์ ์ํด ์ ๋ฆฌ๋์ง ์์ต๋๋ค.
- ์ํํธ๋ ํผ๋ฐ์ค . ๊ฐ์ฒด๋ก ์ธํด ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชจ๋๋ ๊ฒ์ ์๋๋๋ค. OutOfMemoryError๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ญ์ ๋๋ ๊ฒ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ์ ๊ตฌํ์ ๋ฐ๋ผ ๋ ๋น ๋ฅผ ์๋ ์์ต๋๋ค.
- ์ฝํ ์ฐธ์กฐ . ์ฝํ ๋ถ๋๋ฌ์. ๊ฐ์ฒด๊ฐ ์ญ์ ๋๋ ๊ฒ์ ๋ง์ง ์์ผ๋ฉฐ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ด๋ฌํ ์ฐธ์กฐ๋ฅผ ๋ฌด์ํฉ๋๋ค.
- ํฌํ ์ฐธ์กฐ . ๊ฐ์ฒด์ "์ฃฝ์" ์ฒ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ์ฒด๋ ์ข ๋ฃ ํ ๊ฐ๋น์ง ์์ง๋ ๋๊น์ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ์์ง ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ๊ณง ๋ชจ๋ ๊ฒ์ด ์ ์๋ฆฌ์ ๋์ผ ๊ฒ์ ๋๋ค. ์ธ๋ถ ์ฌํญ์ ์ธ๋ถ ์ฌํญ์ ์์ผ๋ฉฐ ์ธ๋ถ ์ฌํญ์ ๊ณ์๋ฉ๋๋ค.
8.2 Java์ WeakReference ๋ฐ SoftReference
๋จผ์ Java์์ WeakReference ์ SoftReference ์ ์ฐจ์ด์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค .
์ฆ, ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ฝํ ์ฐธ์กฐ๋ง ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค. ๊ฐ์ฒด๊ฐ SoftReferences์์ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ JVM์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์คํ ํ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น ํด์ ๋ฉ๋๋ค.
์ด๊ฒ์ ํน์ ๊ฒฝ์ฐ์ Strong ์ฐธ์กฐ๋ณด๋ค SoftReference ์ ํ์คํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค . ์๋ฅผ ๋ค์ด SoftReference๋ ์ ํ๋ฆฌ์ผ์ด์ ์บ์๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฏ๋ก JVM์ด ๊ฐ์ฅ ๋จผ์ ์ํํ๋ ์์ ์ SoftReferences๋ง ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ๋๋ค.
WeakReference๋ ClassLoader์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ํด๋์ค๊ฐ ๋ก๋๋์ง ์์ ๊ฒฝ์ฐ ClassLoader๋ฅผ ์ฐธ์กฐํ๋ฉด ์ ๋ฉ๋๋ค. ์ด๊ฒ์ด WeakReference๊ฐ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ClassLoader์ ๋ํ ๋ง์ง๋ง ๊ฐ๋ ฅํ ์ฐธ์กฐ๊ฐ ์ ๊ฑฐ๋์๋ง์ ClassLoader์์ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ ์ด์ ์ ๋๋ค.
Java์ WeakReference ์์ :
// some object
Student student = new Student();
// weak reference to it
WeakReference weakStudent = new WeakReference(student);
// now the Student object can be garbage collected
student = null;
Java์ SoftReference ์์ :
// some object
Student student = new Student();
// weak reference to it
SoftReference softStudent = new SoftReference(student)
// now the Student object can be garbage collected
// but this will only happen if the JVM has a strong need for memory
student = null;
8.3 ์๋ฐ์ PhantomReference
PhantomReference ์ธ์คํด์ค๋ WeakReference ๋ฐ SoftReference ์์ ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์์ฑ๋์ง๋ง ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๊ฐ์ฒด์ ๊ฐํ(Strong), ์ฝํ(WeakReference) ๋๋ ๋ถ๋๋ฌ์ด(SoftReference) ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ PhantomReference๋ ๊ฐ๋น์ง ์์ง๋ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด Phantom Reference ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
PhantomReference myObjectRef = new PhantomReference(MyObject);
PhantomReference๋ finalize()๊ฐ ์๋ฏธ๊ฐ ์๋ ์ํฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์ฐธ์กฐ ์ ํ์ ๊ฐ์ฒด์ ์ก์ธ์คํ๋๋ก ์ค๊ณ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ํ๊ณผ ๋ค๋ฆ ๋๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ฏธ ์ข ๋ฃ๋์๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ค๋น๊ฐ ๋์๋ค๋ ์ ํธ์ ๋๋ค.
์ด๋ฅผ ์ํด ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ด๋ฅผ ํน์ ReferenceQueue ์ ๋ฐฐ์นํฉ๋๋ค . ReferenceQueue๋ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ธฐ ์ํด ๋ฐฐ์น๋๋ ๊ณณ์ ๋๋ค.
ํฌํ ์ฐธ์กฐ๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋์์์ ์ ์ ์๋ ์์ ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํฐ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ณด์ญ์์ค. ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ ๊ฐ๋น์ง ์์ง ์ค๋น๊ฐ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ธฐ ์ ์ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ์ด์ ์ด๋ฏธ์ง๋ฅผ ์ฃฝ์ผ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์ PhantomReference๋ ์ ์ฐํ๊ณ ์์ ํ ์ ํ์ ๋๋ค. ์ด์ ์ด๋ฏธ์ง ๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ํ ์ด์ ์ด๋ฏธ์ง์ ๋ํ ์ฐธ์กฐ๊ฐ ReferenceQueue๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ด ๋งํฌ๊ฐ ์์ผ๋ฉด ์ ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ์ ์์ต๋๋ค.
GO TO FULL VERSION