JVM์ด๋
์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ฝ์๋ก ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ฃผ์ฒด์ด๋ค. ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ด๋ฉฐ(ํน์ ํ๋ซํผ์ ๊ท์๋์ง์๋๋ค๋ ์๋ฏธ) ์ ํด์ง ๊ท๊ฒฉ์ ๋ฐ๋ผ์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ค. ์ฆ, API๋ฅผ ๋์ผํ๊ฒ ๋ง์ถ ์ํ์์ ์ด๋ก ์ ์ผ๋ก CPU๋ OS์ ๋ฌด๊ดํ๊ฒ ๋๊ฐ์ด ์๋ํ๋ค๋ ์ด์ผ๊ธฐ๋ค.
P-code(์คํ์ ํผ์ฐ์ฐ์ ํ์ ๊ธฐ์ )์ ์ค๋ชฐํ ํฌ(GC, OOP) VM์ ์ํฅ์ ๋ฐ์ ์คํ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์๋ค. P-code๋ type-safe ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ ๋ง์น ์ ์์๊ณ , ์ค๋ชฐํ ํฌ ์ญ์ ๋์ ํ์ ๋ฐฉ์์ ์ฌ์ฉํด์ ํ๋ซํผ์ ๋ฐ๋ผ ํ์ ์ ํํ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ค. jvm์ ๋ชจ๋ ๊ธฐ๋ณธํ์ ์ ์ ์๋ฅผ ๋ช ํํํจ์ผ๋ก์จ ์ด๋ฐ ๋ชจํธํจ์ ์ค์๋ค.
์ฆ, ๊ฒฐ๋ก ์ jvm์ OS-์ฌ์ฉ์ ์ฌ์ด์ ์ค๊ฐ ๋งค๊ฐ ์ญํ ์ ํ๋ค. ์ฌ์ฉ์์ ์๋ฐ ํ์ผ์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ฉด jvm์ด ์ฝ์ ์ ์๋ ํํ์ธ .class(๋ฐ์ดํธ ์ฝ๋ ํ์ผ)๋ก ๋ณ๊ฒฝ๋๊ณ ์ด๊ฑธ jvm์ด OS๊ฐ ์ดํดํ ์ ์๊ฒ ํด์ํด์ค๋ค. JRE๋ ์๋ฐ ๋ฐํ์ ํ๊ฒฝ์ ์ฝ์๋ก ์๋ฐํด๋์ค๋ฅผ jvm์ผ๋ก ๋์ ๋ก๋ํ๋ ํ๊ฒฝ ์ ์ฒด๋ฅผ ์๋ฏธํ๋ค.
์๋ฐ ํด๋์ค ๋ก๋๋ JRE์ ์ผ๋ถ์ธ๋ฐ ํ์ผ๊ณผ ํ์ผ ์์คํ ๊ด๋ จ ์์ ์ ํด๋์ค๋ก๋์์ ์ฒ๋ฆฌํด์ค๋ค. ๋ชจ๋ ์๋ฐ ํด๋์ค๋ ํด๋์ค๋ก๋์ ์ํด ๋ก๋๋๋ค. ์๋ฐ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ง์ ํด๋์ค๋ก๋๋ฅผ ๋ง๋ค ์๋์๋ค. ํด๋์ค ๋ก๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ๋ด์ฉ์ ์ฝ๊ณ , ๊ทธ ์์ ํฌํจ๋ ํด๋์ค๋ค์ ๋ ์ฝ๋ ์ญํ ์ ํ๋ค. ํ๋ก๊ทธ๋จ์ ์์ฒญ(ํธ์ถ)์ด ์๊ธฐ์ ์๋ ๋ก๋ ์์ ์ ์ํํ์ง์๋๋ค.
jvm์ด ์์๋๋ฉด 3๊ฐ์ง ํด๋์ค ๋ก๋๊ฐ ์ฌ์ฉ๋๋ค.
- ๋ถํธ์คํธ๋ฉ ํด๋์ค ๋ก๋ - %JAVA_HOME%/jre/lib์ ์ฝ๋๋ค.
- ํ์ฅ ํด๋์ค ๋ก๋ - %JAVA_HOME%/jre/lib/ext์ ์์นํ ํ์ฅ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฝ๋๋ค.
- ์์คํ ํด๋์ค ๋ก๋ - ํ๊ฒฝ๋ณ์์ ์ํด ๋งตํ๋๋ค.
์๋๋ ์๋ฐ SE7 ๊ธฐ๋ฐ JVM ์ํคํ ์ฒ ๋์์ด๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ๋ฒ ๊ธฐ์ตํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
Execution Engine์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ํ์ค ์ฉ ์ฝ์ด์ ์คํํ๋ค. PC ๋ ์ง์คํฐ๋ ์ฐ๋ ๋์ ๊ด๋ จ๋ ๋ถ๋ถ์ด๋ค. ์ฐ๋ ๋๊ฐ ์์ฑ๋ ๋ ๋ง๋ค ์์ฑ๋๋ ๊ณต๊ฐ์ผ๋ก ๊ฐ ์ฐ๋ ๋๋ง๋ค ํ๋ ์ฉ ์กด์ฌํ๋ค. ํ์ฌ ์ํ ์ค์ธ jvm ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๊ณ ์ฐ๋ ๋๊ฐ ์ด๋ค ๋ถ๋ถ์์ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์คํํ ์ง์ ๋ํ ๊ธฐ๋ก์ ์ํํ๋ค. ํ ์์ญ์ GC๊ฐ ๋ด๋นํ๋ ๋ถ๋ถ์ด๋ค.
GC - Garbage Collection
๊ฐ๋น์ง ์ฝ๋ ์ /์ฝ๋ ํฐ๋ผ๊ณ ๋ถ๋ฅด๋ ์ด ๋ฐฉ๋ฒ์ ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์์ญ ์ค ํ์์๊ฒ ๋ ์์ญ์ ํด์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ ์ค ํ๋๋ค. ๋์ ํ ๋น์์ญ์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ํ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ํ๋ค. ์๋ฐ๋ GC๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ C/C++๊ณผ ๊ฐ์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ญ ์ ์ฒด๋ฅผ ์์ ํ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค.
์ปฌ๋ ํ ํ ๋ ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ ํฌ์ธํฐ ์ถ์ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด๋ค. ์ด ๋ฐฉ์์ ํ ๊ฐ ์ด์์ ๋ณ์๊ฐ ์ ๊ทผ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ(๊ฐ์ฉ)๋ก ๊ฐ์ฃผํ๊ณ , ๊ทธ ์ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ ์ง/๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก ์ ์ ํ ์ ์๋๋ฐ, ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์๋ฅผ ํฌํจํ๋ค. ์ด ๊ฐ์ฒด๊ฐ ๊ฐ๋ฆฌํค๋ ๋ชจ๋ ๊ฐ์ฒด๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ์ด๊ฒ ๊ฐ์ ์ ์ธ ์ ๊ทผ์ธ๋ฐ ์ฌ๊ท๋ก ๋ฐ์๋ค์ด๋ฉด ๋๋ค.
ํ๋ก๊ทธ๋จ์์ ์ต๊ทผ์ ํ ๋น๋ ์์ญ์ด ๋ ๋จผ์ ํด์ ๋ ํ๋ฅ ์ด ๋๋ค๋ ๊ด์ฐฐ์ด ์์๋๋ฐ, ์ธ๋๋จ์ ์์ง๋ฐฉ์(Weak Generation Hypothesis)์ ํ ๋น๋ ์๊ฐ๋๋ฅผ ๊ฐ ์ธ๋๋ก ๊ตฌ๋ถํด์ ์ธ๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค. ํ ์ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๋ค ์ฐจ๋ฉด, ์ด ์์ญ์์ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ๋ ์ด์ ์ธ๋์ ๋ฉ๋ชจ๋ฆฌ์์ญ์ผ๋ก ์ฎ๊ธด๋ค.
์ค๋๋ ์์ญ์์๋ ๊ฐ์ฒด๊ฐ ๋ณํ์ง์์ ํ๋ฅ ์ด ๋๋ค๋ ์ ์ ์ด์ฉํ ๊ฒ์ด๋ค. ์ด๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ ์์ญ๋ง์ ์ฃผ๊ธฐ์ ์ผ๋ก ์์งํ๊ฒ ๋๋ฏ๋ก ์ฑ๋ฅ์ด ์ฌ๋ผ๊ฐ๋ค. ์๋ฐ๋ฅผ ํฌํจํด ํ๋์ ์ธ์ด ๋๋ถ๋ถ์์ ์ด ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆผ์ ๋ณด๋ฉด Young ์์ญ๊ณผ Old ์์ญ, Permanent ์์ญ์ด ์๋ค. Permanent ์์ญ์ ๋ง์ด ๊ทธ๋ ์ง ๊ทธ๋ฅ ๋ฉ์๋ ์์ญ์ด๋ผ๊ณ ๋ ํ๋ฉฐ ๋ฌธ์์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๋ค. ๋น์ฐํ GC๊ฐ ๋ฐ์ํ ์ ์๋ค.
Young ์์ญ์์ ์ ๊ฑฐ๋ ๋๋ฅผ Minor GC, Old ์์ญ์์ ์ ๊ฑฐ๋ ๋๋ฅผ Major GC(Full GC)๊ฐ ๋ฐ์ํ๋ค๊ณ ๋งํ๋ค. Old์ ์๋ ๊ฐ์ฒด๊ฐ Young์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด ์ด ๊ฒฝ์ฐ๋ฅผ ์นด๋ํ ์ด๋ธ(Old์์ญ์ 512byte ์ง๋ฆฌ ๋ฉ์ด๋ฆฌ)์ ๊ธฐ๋กํด์ Young์์ ์ญ์ ํ ๋ Old์์ญ ์ ์ฒด์์ ์ฐพ์ง์๊ณ ์นด๋ํ ์ด๋ธ์์ ์ฐพ์ GC์ฒ๋ฆฌํ๋ค.
๋ค๋ฅธ ํฌ์ธํฐ ์ถ์ ๊ธฐ๋ฒ์ผ๋ก mark and sweep, ์ผ์ํ์ ๊ธฐ๋ฒ, ๊ฐ์ฒด์ด๋๊ธฐ๋ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ด ์กด์ฌํ๋ค.
๋ค๋ฅธ ์์ง๋ฐฉ์์ผ๋ก๋ ์ฐธ์กฐํ์ ๊ณ์ฐ ๋ฐฉ์์ด ์๋๋ฐ ๊ฐ ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์๋ฅผ ๊ธฐ์ตํด์ ์ฐธ์กฐํ์๊ฐ 0์ด๋ผ๋ฉด ์ฌ์ฉ์ด ๋๋ฌ๋ค๋ ์๋ฏธ๊ฐ ๋๋ฏ๋ก ๊ทธ ๊ฐ์ฒด๋ฅผ ํด์ ํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ์ฅ์ ์ ์ ๊ทผ๋ถ๊ฐํด์ง๋ ์์ ์ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋๊น ํด์ ์์ ์ ์์ธกํ ์ ์๋ค๋ ์ ์ด๊ณ , ๋จ์ ์ด๋ผ๋ฉด ๋ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ํ์ฐธ์กฐ๋ผ๊ณ ํ๋ ์ํฉ, ์ฐธ์กฐํ์๊ฐ 0์ด๋ ๋ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ค ๋ํ 0์ผ๋ก ๋ง๋๋ ์ฐ์ ์์ ๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ์ ์ด๋ค. ํ์ด์ฌ์์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
GC๊ฐ ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฒ๊ทธ๋ฅผ ์ก์ ์ ์๋ค
- ์ ํจํ์ง ์์ ํฌ์ธํฐ ์ ๊ทผ - ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ
- ์ด์ค ํด์ - ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํด์ ํ๋ ์๋
- ๋ฉ๋ชจ๋ฆฌ ๋์ - ๋์ด์ ํ์์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์๊ณ ๋จ์์๋ ์ํ(๊ณต๊ฐ์ฐจ์ง)
GC๋ฅผ ์ฌ์ฉํ๋ฉด์ ์๊ธฐ๋ ๋ฌธ์ ์ ์ด๋ผ๊ณ ํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ํด์ ์์ ์ ์ถ์ ํ๊ธฐ์ํด ํ์ํ ์ค๋ฒํค๋, ์ปฌ๋ ํ ์์ , ์ ์ ์์ ์ ์์ธกํ๋๊ฒ ์ด๋ ต๋ค๋ ์ (๋ฆฌ์ผํ์ ์์คํ ์์๋ ๋ถ์ ํฉํ ์๋๋ฐฉ์์ด๋ค.), ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ ์์ ์ ์ ์ ์๋ค๋ ์ ์ด๋ค. ์ฆ 3๊ฐ์ง ๋ชจ๋ ์์ํด์ ์ ๊ด๋ จํด์ ๋ฐ์ํ๋ ๋ฌธ์ ์ธ๋ฐ ์ฌ์ฉ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ๋ฅผ ์จ์ ํ ํ๋ ๊ฒ ์๋๊ธฐ์ ๋ฐ์ํ๋ ๋จ์ ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
๋ GC๋ฅผ ์คํํ ๋ JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฉ์ถ๋ stop-the-world๊ฐ ๋ฐ์ํ๋๋ฐ GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ฐ๋ ๋๋ฅผ ๋ชจ๋ ๋ฉ์ถ๋ ๊ฒ์ด๋ค. GC๊ฐ ์๋ฃ๋๋ฉด ์ฌ๊ฐ๋๋๋ฐ ์ด ์๊ฐ์ ์ค์ด๋ ๊ฒ์ GC ํ๋์ด๋ผ๊ณ ๋๋ถ๋ถ ์นญํ๋ค๊ณ ํ๋ค.
์ฐธ์กฐ:
์๋ฐ ๊ฐ์ ๋จธ์ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
์ฐ๋ ๊ธฐ ์์ง (์ปดํจํฐ ๊ณผํ) - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
์ฐธ์กฐ ํ์ ๊ณ์ฐ ๋ฐฉ์ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
NAVER D2
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^