๊ฐ๋น์ง ์์ง๊ธฐ(๋ฉ๋ชจ๋ฆฌ ํ์๊ธฐ)์ ๋์ ๋ผ์ธ
๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ฏ๋ก Java ํ๋ก๊ทธ๋๋จธ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ชจ๋ํฐ๋งํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ JVM(Java Virtual Machine)์ ์ํด ์คํ๋ฉ๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋์ด ๋ ์ด์ ํ์ํ์ง ์์ ๊ฐ์ฒด์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค์
๋๋ค. JVM๋ง๋ค ๊ฐ๋น์ง ์์ง ์๊ณ ๋ฆฌ์ฆ์ด ๋ค๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด ์ฐธ์กฐ ๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ ๋๋ ๋งํฌ์
๋ฐ ์คํฌ๋ํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
Java์์ ๊ฐ๋น์ง ์์ง๊ธฐ ์คํ
JVM์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์์ง๊ธฐ์ ์๋์ด ํญ์ ์ถฉ๋ถํ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. ๋ณต๊ตฌ ํ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด JVM์์ OutOfMemoryError ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค. JVM์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ ์ ์ต์ํ ํ ๋ฒ์ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ Java์์ ์คํ๋๋๋ก ์์ฒญํ ์ ์์ง๋ง ์ด ์์
์ ๊ฐ์ ๋ก ์ํํ ์๋ ์์ต๋๋ค.
๊ฐ๋น์ง ์์ง๊ธฐ ์คํ ์์ฒญ
์์ฒญํ๋ ค๋ฉด ๋ค์ ๋ฉ์๋ ์ค ํ๋๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค.
System.gc()
Runtime.getRuntime().gc()
๊ฐ๋น์ง ์์ง๊ธฐ ์คํ์ ๋ํ ์ ํฉ์ฑ
์ด์์๋ ์คํธ๋ฆผ์์ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด๋ ํ๊ธฐ๋์ด์ผ ํฉ๋๋ค. ๊ฐ์ฒด๋ ๋ค์ํ ๊ฒฝ์ฐ์ ํ๊ธฐ๋ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ฐธ์กฐ ์ ํ์ ๋ณ์๊ฐ "0"์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ฒด์ ๋ํ ๋ค๋ฅธ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ํ๊ธฐํด์ผ ํฉ๋๋ค.
- ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ฐธ์กฐํ์ ๋ณ์๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํด ์์ฑ๋ ๊ฒฝ์ฐ, ํด๋น ๊ฐ์ฒด์ ๋ํ ๋ค๋ฅธ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ํ๊ธฐํด์ผ ํฉ๋๋ค.
- ๋ฉ์๋์์ ๋ก์ปฌ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ํด๋น ๋ฉ์๋์์ ๋ด๋ณด๋ด์ง์ง ์๋ ํ(์ฆ, ์์ธ๋ก ๋ฐํ๋๊ฑฐ๋ ๋ฐ์๋๋) ๋ฉ์๋๊ฐ ์ข
๋ฃ๋ ๋ ์ญ์ ๋ฉ๋๋ค.
- ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ ๋ผ์ด๋ธ ์ค๋ ๋์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ํ๊ธฐ๋ ์ ์์ต๋๋ค.
์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
public class TestGC
{
public static void main(String [] args)
{
Object o1 = new Integer(3);
Object o2 = new String("Tutorial");
o1 = o2;
o2 = null;
}
}
์ด ์์์
Integer
o1์ด ์๋ ์ฐธ์กฐํ ๊ฐ์ฒด(์ ์)๋ ์ด์ o1์ด ๊ฐ์ฒด
String
(๋ฌธ์์ด)๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋ผ์ธ 3 ์ดํ์ ์ญ์ ๋ ์ ์์ต๋๋ค. o2๊ฐ null์ ์ฐธ์กฐํ๋๋ก ์์ฑ๋์๋๋ผ๋ ํด๋น ๊ฐ์ฒด
String
(๋ฌธ์์ด)๋ o1์ด ์ฐธ์กฐํ๋ฏ๋ก ์ฌํ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ง๋ฌด๋ฆฌ
finalize()
Java ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ๊ธฐ ์ ์ ํ์ํ ์ ๋ฆฌ ์์
์ ์ํํ๋ ๋ฉ์๋(์ต์ข
ํ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค . ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ๋ ์ด์ ์๋ค๊ณ ํ๋จํ๋ฉด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ์ฒด์ ๋ํด ์ด ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ ํด๋์ค์ ์ค๋ช
๋์ด ์์ต๋๋ค
Object
. ์ด๋ ๋ชจ๋ ํด๋์ค์์ ์์๋๋ค๋ ์๋ฏธ์
๋๋ค.
finalize()
์๋ธํด๋์ค๋ ์์คํ
๋ฆฌ์์ค์์ ์์ ์ ํด์ ํ๊ฑฐ๋ ๋ค๋ฅธ ์ ๋ฆฌ๋ฅผ ์ํด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํฉ๋๋ค .
protected void finalize() throws Throwable
๋ฉ์๋์ ์ํด ๋ฑ๋ก๋์ง ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด
finalize()
์์ธ๊ฐ ๋ฌด์๋๊ณ ํด๋น ๊ฐ์ฒด์ ์ข
๋ฃ๊ฐ ์ค์ง๋ฉ๋๋ค. ์ด ๋ฉ์๋๋
finalize()
๊ฐ์ฒด์ ์๋ช
๋์ ํ ๋ฒ๋ง ํธ์ถ๋ฉ๋๋ค.
finalize()
๋ชจ๋ ๊ฐ์ฒด์ ๋ํด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ธฐ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค . ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ์๋ ์ด ๊ฐ์ฒด์ ๋ํด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ ์ด์ ํ์ฑํ๋์ง ์์ต๋๋ค
finalize()
. ์ด ๋ฉ์๋๋
finalize()
๊ฐ์ฒด๊ฐ ๊ฐ๋น์ง ์์ง๋๊ธฐ ์ ์ ํญ์ ํ ๋ฒ ํธ์ถ๋ฉ๋๋ค.
finalize()
๊ทธ๋ฌ๋ ํด๋น ๊ฐ์ฒด๋ ํ๊ธฐ ๋์์ด ์๋๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ์ ์ฒด ๊ธฐ๊ฐ ๋์ ํด๋น ๊ฐ์ฒด์ ๋ํด ๋ฉ์๋๊ฐ ํ์ฑํ๋์ง ์์ ์๋ ์์ต๋๋ค .
์์ฝ
์ด๋ฒ ์ ์์๋ ์๋ฐ ์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์
(garbage collection) ๊ณผ์ ์ ์ดํด๋ณด์์ต๋๋ค. ๊ฐ๋น์ง ์์ง์ ๊ฐ์ ๋ก ์ํํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์ฌํ์ฉํ ์ ์๊ฒ ๋ง๋๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์ ๊ณ
finalize()
๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ์ฒด๋ฅผ ํ์ํ๊ธฐ ์ ์ ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
์ด๋
์ง๋ฌธ: 7ํ ์ดํ์๋ ๋ช ๊ฐ์ ๊ฐ์ฒด๊ฐ ํ๊ธฐ ๋์์ด ๋ฉ๋๊น?
public class TutorialGC
{
public static void main(String [] args)
{
Object a = new Integer(100);
Object b = new Long(100);
Object c = new String("100");
a = null;
a = c;
c = b;
b = a;
}
}
๋ต ์ต์
: A. 0 B. 1 C. 2 D. 3 E. ์ฝ๋๋ฅผ ์ปดํ์ผํ ์ ์์ต๋๋ค.
์ฌ๋ฐ๋ฅธ ์ต์
: B
์ค๋ช
: ๋ผ์ธ 1, 2, 3์์ ์์ฑ๋ ์ธ ๊ฐ์ฒด ์ค ํด๋น ๊ฐ์ฒด๋ง
Integer
๋ค์ ์์น์์ ์ญ์ ๋์ด์ผ ํฉ๋๋ค. 7ํ ๋. ์๋ object ๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์ ์ฐธ์กฐ a๋ 5ํ์
Integer
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค . ๋ฐ๋ผ์ 5ํ ์ดํ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์์ผ๋ฏ๋ก ํด๋น ๊ฐ์ฒด๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค. ๋ณ์ ๋ฐ 6ํ๊ณผ 7ํ์ ๊ฐ์ฒด ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก ์ฌํ์ฉํ ์ ์์ต๋๋ค.
String
Integer
b
c
String
Long
GO TO FULL VERSION