๐ก OS์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํด์ Java์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ ํ๋ก๊ทธ๋จ
์ฆ, OS์ JAVA ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ด์์ Java Byte Code๋ฅผ OS์ ๋ง๊ฒ ํด์ํด์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ์๋ฐ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด๋ค์ด๊ณ , ์๋ฐ API์ ํจ๊ป ์คํํ๋ ์ญํ ์ ํ๋ค.
-> ์๋ฐ๋ฅผ OS ์์์ ์คํ์ํค๊ธฐ ์ํ ๊ฐ์ ๋จธ์
Java์ ์์ค์ฝ๋(์์์ฝ๋)๋ CPU๊ฐ ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ์ ํด์ค์ผํ๋ค.
๐ก ์ปดํ์ผ : ์ด๋ค ์ธ์ด์ ์ฝ๋ ์ ์ฒด๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์
ํ์ง๋ง, ์๋ฐ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ์ง์ ์ปดํ์ผ์ ํ๋ ๊ฒ์ด ์๋ ์๋ณธ ์ฝ๋(*.java
)๋ฅผ JVM์ด ์ธ์ํ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋(*.class
)๋ก ๋จผ์ ๋ณํ๋๋ค. ์ด ๊ณผ์ ์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ํํ๋ ๊ฒ์ด๊ณ , ์ด๋ ๋ณํ๋ bytecode๋ ๊ธฐ๊ณ์ด๊ฐ ์๋๋ฏ๋ก, OS์์ ์คํํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก, JVM์ด Byte code๋ฅผ OS์ ์๊ด์์ด ํด์ํ์ฌ ์คํํ ์ ์๋๋ก ํด์ค๋ค. ๊ทธ๋์ JVM์ OS์ ์ข
์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ์ด๋ค ๋๋ฐ์ด์ค๋ ์ง ๊ด๊ณ์์ด ์๋ฐ ํ์ผ์ JVM์์ ์คํํ ์ ์๋ ๊ฒ์ด๋ค.
: RunTime ์์ ์ Java compiler๋ฅผ ํตํด ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํ๋ ํด๋์ค๋ฅผ ๋ก๋ฉํ๋ฉฐ jar
ํ์ผ ๋ด ์ ์ฅ๋ ํด๋์ค๋ค์ JVM ์์ ํ์ฌํ๋ค.
๐ก ๋ฐํ์ : ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ์๊ฐ (
์ปดํ์ผ ํ์ -> ๋ฐํ์
)
: Class Loader๋ฅผ ํตํด ๋ก๋๋ ํด๋์ค๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ค.
์ด ๊ณผ์ ์์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ฐ์ด๋๋ฆฌ ์ฝ๋(๊ธฐ๊ณ์ด)๋ก ๋ณํํ๋ ์ปดํ์ผ ์์ ๋ ์ํํ๋ค. JVM์ ๊ธฐ์กด์ Interpreter ๋ฐฉ์์ผ๋ก ํ ์ค์ฉ ํด์ํ๊ณ ์คํํ์ฌ ์๋๊ฐ ๋๋ฆฐ ๋ฌธ์ ๊ฐ ์์์ง๋ง, JIT(Just-In Time) compiler ๋ฐฉ์์ ์ฌ์ฉํด Bytecode๋ฅผ Nativecode(๊ธฐ๊ณ์ด)๋ก ๋ณ๊ฒฝํด์ ์คํํ๋ค. ์ด ๊ณผ์ ์์ ์๊ธฐ๋ ๋น์ฉ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Interpreter ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ฐ ์ผ์ ๊ธฐ์ค์ด ๋์ด๊ฐ๊ฒ ๋๋ฉด JIT compiler ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
: JVM์ด ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด OS๋ก ๋ถํฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ๋ค.
ํด๋์ค ๋ก๋๋ฅผ ํตํด ๋ก๋ํ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํด๋น ์์ญ์ ๋ฐฐ์นํ๋ค.
: JVM Heap ์์ญ์์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํด์ฃผ๋ ํ๋ก์ธ์ค
C์ธ์ด์์๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด free()
๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง, ์๋ฐ or ์ฝํ๋ฆฐ์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํด์ ํด์ฃผ์ง ์๋๋ค. ์ง์ ํด์ ํ์ง ์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์ด์ ๋ GC(Garbage Collector)๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
=> GC๋ ์คํ์ ๋ชจ๋ ๋ณ์ ๋ฐ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ฉด์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋์ง ํ์ธํ๋ค.