
JDK๋ Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉํ ์ ์๋ SDK(Software Development Kit)์ด๋ค.
๐ก SDK?
Software Development Kit (์ํํธ์จ์ด ๊ฐ๋ฐ ํคํธ) ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์๋ถํฐ ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ์์ฑํ๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ, ์ฝ๋ ์ํ ๋ฐ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ํตํฉ ํ๋ซํผ์ ์ ๊ณตํ๋ค.
SDK์ ๋ํ์ ์ธ ์๋ก, ์๋๋ก์ด๋ ์คํ๋์ค ๋ฑ์ด ์๋ค.
JDK์์๋ ์๋ฐ ๊ฐ๋ฐ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ javac, javadoc ๋ฑ์ ๊ฐ๋ฐ ๋๊ตฌ๋ค์ด ํฌํจ๋์ด ์๊ณ , ๊ฐ๋ฐ์ ํ๋ ค๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ๋ ์์ผ์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์์ ๋ฐฐ์ธ JRE(Java Runtime Environment)๋ ํจ๊ป ํฌํจ๋์ด ์๋ค.
์๋ฐ๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ ์คํ๋ง ํ๊ธฐ ์ํด์๋ JRE๋ง ์์ผ๋ฉด ๋์ง๋ง, ์๋ฐ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด์ ์์ค์ฝ๋(*.java)๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก(*.class)๋ก ๋ฐ๊ฟ์ฃผ๋ JDK์ ์กด์ฌํ๋ ์ปดํ์ผ๋ฌ(javac)๊ฐ ํ์ํ๋ฏ๋ก JDK ๊ฐ ํ์์ ์ด๋ค
์๋ ๊ทธ๋ฆผ์์ ๋ณผ์ ์๋ฏ์ด JDK๋ JVM, JRE๋ฅผ ๋ชจ๋ ํฌํจํ๊ณ , ์ด์ธ์ ์๋ฐ๋ฅผ ๊ฐ๋ฐ ํ๋๋ฐ ํ์ํ development tools ๋ ํฌํจํ๊ณ ์๋ ๊ฑธ ์ ์ ์๋ค.

JRE์ ๋ํด ์์ธํ ์๊ธฐ ์ ์ Java์ ์ฅ์ ์ ๋ํด ๋ฏธ๋ฆฌ ์์๋ณด์
Java์ ๊ฐ์ ์ด ๋ฌด์์ผ๊น
์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง ๊ทธ ์ค ํ๋๋ ํ๋ซํผ ๋
๋ฆฝ์ ์ด๋ผ๋ ์ ์ด๋ค.
์ฆ, ํน์ OS์์ ์์ฑ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ ํน๋ณํ ์ฝ๋ ์์ ์์ด ํ OS์์๋ ์คํ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค
์ด๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ ์ด์ ๊ฐ ๋ฐ๋ก JRE์ด๋ค.
JRE์ ๋ํ aws์ ๊ณต์๋ฌธ์ ์ค๋ช ์ ์๋์ ๊ฐ๋ค
JRE๋ Java ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๊ธฐ ์ํด ํ์ํ ์ํํธ์จ์ด์ ๋๋ค. Java๋ ์ฌ๋ฌ ์ต์ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฐ์ด ๋๋ ์ปดํจํฐ ์ธ์ด์ ๋๋ค. JRE๋ Java ํ๋ก๊ทธ๋จ๊ณผ ์ด์ ์ฒด์ ๊ฐ์ ํต์ ์ ์ํ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋๋ค. JRE๋ Java ์ํํธ์จ์ด ์์ฑ ์ ์ถ๊ฐ ์์ ์์ด ์ด๋ค ์ด์ ์ฒด์ ์์๋ ์คํ๋๋๋ก ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ๋ฒ์ญ๊ธฐ ๋ฐ ์ด์ง์ ์ญํ ์ ํฉ๋๋ค.
์๋ฐํ ๋งํ๋ฉด ์ถ๊ฐ ์์ ์์ด ์ด๋ค ์ด์ ์ฒด์ ์์๋ ์คํ๋๋๋ก ํ๋ ์ญํ ์ JRE์ ํฌํจ๋ JVM์ ์ญํ ์ด๋ค. JVM์ ๋ํด์๋ ๋ค์์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์์๋ณด๋๋ก ํ์.
๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด, JRE๋ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ง์ ํ์ผ ๋ฐ JVM์ด ํฌํจ๋ ํจํค์ง์ด๊ณ , ์ปดํ์ผ ๋ Java ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ค๋ฉด JRE๊ฐ ํ์ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.

JVM์ ์๋ฐ ๊ฐ์๋จธ์ (Java Virtual Machine)์ ์ฝ์๋ก์, Java ํ๋ก๊ทธ๋จ์ ์คํํ๋ ์ํํธ์จ์ด์ด๋ค.
์๋ฐ๋ก ์์ฑ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ JVM์์๋ง ์คํ๋ ์ ์์ผ๋ฏ๋ก, ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์๋ ๋ฐ๋์ JVM์ด ์ค์น๋์ด ์์ด์ผ ํ๋ค.
์์ ๋งํ๋ฏ์ด JVM์ JRE์ ํฌํจ๋์ด ์๋ค. ๊ทธ๋์ ํ์ฌ ์ฌ์ฉํ๋ ์ปดํจํฐ์ ์ด์์ฒด์ ์ ๋ง๋ JRE๊ฐ ์ค์น๋์ด ์๋ค๋ฉด JVM์ด ์ค์น๋์ด ์๋ค๋ ๋ป์ด๊ธฐ๋ ํ๋ค.
JAVA๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ธ๊ธฐ ์๋ ํต์ฌ ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด JVM ๊ฐ๋
์ธ๋ฐ,
JVM์ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ๊ฐ์ฅ ํฐ ์ด์ ์ย JVM์ ์ฌ์ฉํ๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ํ๋ซํผ์์ ์ ์ฝ ์์ด ๋์ํ๋๋ก ํ ์ ์๋ค๋ ์ ์ด๋ค.
๋ค๋ง, JVM์ ๋ฐ์ดํธ์ฝ๋(*.class)๋ฅผ ๊ฐ OS๋ณ๋ก ๋ค๋ฅธ ๊ธฐ๊ณ์ด(Binary Code)๋ก ๋ณ์ญํด์ผ ํ๋ค.
์ด๊ฒ์ด OS๋ณ๋ก ์ค์นํ๋ JDK(Java Development Kit)๊ฐ ๋ค๋ฅธ ์ด์ ์ด๋ค.
๋ํ JVM์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด ์ค๋ค.

JVM๋ ํฌ๊ฒ 3๊ฐ์ง ํต์ฌ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ์๋ค.

ํด๋์ค๋ก๋ (ClassLoader)
์คํ ์์ง (Execution Engine)
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ (Runtime Data Area)

์ฆ, ๋ก๋๋ ๋ฐ์ดํธ ์ฝ๋(.class)๋ค์ ์ฎ์ด์ JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Area์ ๋ฐฐ์นํ๋ค.
ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ก๋ฉ ๊ธฐ๋ฅ์ ํ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ์ง ์๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ์ํ ๊ฒฝ์ฐ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๊ฒ ๋๋ค.
ํด๋์ค ํ์ผ์ ๋ก๋ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ด 3๋จ๊ณ๋ก ๊ตฌ์ฑ๋๋ค. (Loading โ Linkingย โ Initialization)

Loading(๋ก๋) : ํด๋์ค ํ์ผ์ ๊ฐ์ ธ์์ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ค.Linking(๋งํฌ) : ํด๋์ค ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฒ์ฆํ๋ ๊ณผ์ ์ด๋ค.Verifying(๊ฒ์ฆ) : ์ฝ์ด๋ค์ธ ํด๋์ค๊ฐ JVM ๋ช
์ธ์ ๋ช
์๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ๊ฒ์ฌํ๋ค.preparing(์ค๋น) : ํด๋์ค๊ฐ ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.Resolving(๋ถ์) : ํด๋์ค์ย ์์ย ํย ๋ดย ๋ชจ๋ ย ์ฌ๋ณผ๋ฆญย ๋ ํผ๋ฐ์ค๋ฅผย ๋ค์ด๋ ํธย ๋ ํผ๋ฐ์ค๋กย ๋ณ๊ฒฝํ๋ค.๐ก์ฌ๋ณผ๋ฆญ ์ฐธ์กฐ(symbolic reference)์ ์ง์ ์ฐธ์กฐ(direct reference)
์ฌ๋ณผ๋ฆญ ์ฐธ์กฐ(symbolic reference)๋ ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ฌ์ฉํ class, field, method์ ์ด๋ฆ์ ์ง์นญํ๋ค. Resolving ๋จ๊ณ๋ class, field, method ๊ทธ๋ฆฌ๊ณ constant pool์ symbolic references๋ฅผ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ค.
Initialization(์ด๊ธฐํ) : ํด๋์คย ๋ณ์๋ค์ย ์ ์ ํย ๊ฐ์ผ๋กย ์ด๊ธฐํํ๋ค.ย (ย staticย ํ๋๋ค์ย ์ค์ ๋ย ๊ฐ์ผ๋กย ์ด๊ธฐํย ๋ฑย )์คํ ์์ง์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฐฐ์น๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค
์๋ฐ ๋ฐ์ดํธ ์ฝ๋(*.class)๋ ๊ธฐ๊ณ๊ฐ ๋ฐ๋ก ์ํํ ์ ์๋ ์ธ์ด๋ณด๋ค๋ ๊ฐ์๋จธ์ ์ด ์ดํดํ ์ ์๋ ์ค๊ฐ ๋ ๋ฒจ๋ก ์ปดํ์ผ ๋ ์ฝ๋์ด๋ค. ๊ทธ๋์ ์คํ ์์ง์ ์ด์ ๊ฐ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ค์ ๋ก JVM ๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ํํ๋ก ๋ณ๊ฒฝํด์ค๋ค.
์ด ์ํ ๊ณผ์ ์์ ์คํ ์์ง์ ์ธํฐํ๋ฆฌํฐ์ JIT ์ปดํ์ผ๋ฌ ๋ ๊ฐ์ง ๋ฐฉ์์ ํผํฉํ์ฌ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ค.

โ๏ธ ์ธํฐํ๋ฆฌํฐ(Interpreter)
๋ฐ์ดํธ ์ฝ๋ ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์ฝ์ด์ ํด์ํ๊ณ ๋ฐ๋ก ์คํํ๋ค.
JVM์์์ย ๋ฐ์ดํธ์ฝ๋๋ย ๊ธฐ๋ณธ์ ์ผ๋กย ์ธํฐํ๋ฆฌํฐย ๋ฐฉ์์ผ๋กย ๋์ํ๋ค.ย
๋ค๋ง ๊ฐ์ ๋ฉ์๋ ๋ผ๋ ์ฌ๋ฌ๋ฒ ํธ์ถ์ด ๋๋ค๋ฉด ๋งค๋ฒ ํด์ํ๊ณ ์ํํด์ผ ๋์ ์ ์ฒด์ ์ธ ์๋๋ ๋๋ฆฌ๋ค.
โ๏ธ JIT ์ปดํ์ผ๋ฌ(Just-In-Time Compiler)
์์ Interpreter์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ๋ฐฉ์์ผ๋ก, ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ฌ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ Native Code๋ก ๋ณ๊ฒฝํ๊ณ ์ดํ์๋ ํด๋น ๋ฉ์๋๋ฅผ ๋ ์ด์ ์ธํฐํ๋ฆฌํ ํ์ง ์๊ณ ์บ์ฑํด ๋์๋ค๊ฐย ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค.
ํ๋์ฉ ์ธํฐํ๋ฆฌํ ํ์ฌ ์คํํ๋๊ฒ์ด ์๋๋ผ, ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์คํ ์๋๋ ์ธํฐํ๋ฆฌํ ๋ฐฉ์๋ณด๋ค ๋น ๋ฅด๋ค.
ํ์ง๋ง ๋ฐ์ดํธ์ฝ๋๋ฅผ Native Code๋ก ๋ณํํ๋ ๋ฐ์๋ ๋น์ฉ์ด ์์๋๋ฏ๋ก, JVM์ ๋ชจ๋ ์ฝ๋๋ฅผ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ์คํํ์ง ์๊ณ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค ์ผ์ ๊ธฐ์ค์ด ๋์ด๊ฐ๋ฉด JIT ์ปดํ์ผ ๋ฐฉ์์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์์ผ๋ก ์งํํ๋ค.
โ๏ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ (Garbage Collector ,GC)

C์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ง์ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ค์ผ ๋์ง๋ง, JAVA๋ ์ด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์๊ฐ ์ต์ ํ ์์ผ์ค๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ฏ๋ก, ๋์ฑ ์์ฝ๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋๋ก ํด์ค๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋์ผ๋ก ์คํ๋์ง๋ง, ๋จ GC(๊ฐ๋น์ง ์ปฌ๋ ํฐ) ๊ฐ ์คํ๋๋ ์๊ฐ์ ์ ํด์ ธ ์์ง ์๋ค.
ํนํ Full GC ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ, GC ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ค์ง๋๊ธฐ ๋๋ฌธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.

๋ฐํ์
๋ฐ์ดํฐ ์์ญ์ ์ฝ๊ฒ ๋งํ๋ฉดย JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋กย ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ์ด๋ค.
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํฌ๊ฒ Method Area, Heap Area, Stack Area, PC Register, Native Method Stack๋ก ๋๋ ์ ์๋ค.

์ด๋ Method Area, Heap Area ๋ ๋ชจ๋ ์ฐ๋ ๋(Thread)๊ฐ ๊ณต์ ํ๋ ์์ญ์ด๊ณ , ๋๋จธ์ง Stack Area, PC Register, Native Method Stack ์ ๊ฐ ์ฐ๋ ๋ ๋ง๋ค ์์ฑ๋๋ ๊ฐ๋ณ ์์ญ์ด๋ค.
๋ฐ๋ผ์ ์์ ๊ทธ๋ฆผ์ ์ข๋ ์์ธํ ํํํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋์์ด ๋๋ค.

โ๏ธ ๋ฉ์๋ ์์ญ (Method Area)
๋ฉ์๋ ์์ญ์ JVM์ด ์์๋ ๋ ์์ฑ๋๋ ๊ณต๊ฐ์ผ๋ก ๋ฐ์ดํธ ์ฝ๋(.class)๋ฅผ ์ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ๋ฆด ๋ ์ด๊ธฐํ๋๋ ๋์์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
JVM์ดย ๋์ํ๊ณ ย ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ฅ ๋๋ค.
๐ก Tip
๋ฉ์๋ ์์ญ(Method Area) ์ Class Area ๋ Static Area ๋ก๋ ๋ถ๋ฆฌ์ด๋ค.
๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ด๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ ์ฝ๋ ์ ๋ณด๋ค์ด ์ ์ฅ๋๊ฒ ๋๋ค.

๊ฐ๋จํ ๋งํ์๋ฉด ๋ฉ์๋ ์์ญ์๋ ์ ์ ํ๋์ย ํด๋์ค ๊ตฌ์กฐ๋ง์ ๊ฐ๊ณ ์๋ค๊ณ ํ ์์๋ค.
๐ก ๋ฐํ์ ์์ํ (Runtime Constant Pool)
- ๋ฉ์๋ ์์ญ์ ์กด์ฌํ๋ ๋ณ๋์ ๊ด๋ฆฌ์์ญ.
- ๊ฐ ํด๋์ค/์ธํฐํ์ด์ค ๋ง๋ค ๋ณ๋์ constant pool ํ ์ด๋ธ์ด ์กด์ฌํ๋๋ฐ, ํด๋์ค ์์ฑํ ๋ ์ฐธ์กฐํด์ผํ ์ ๋ณด๋ค์ ์์๋ก ๊ฐ์ง๊ณ ์๋ ์์ญ์ด๋ค.
- JVM์ ์ด Constant Pool์ ํตํด ํด๋น ๋ฉ์๋๋ ํ๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฃผ์๋ฅผ ์ฐพ์ ์ฐธ์กฐํ๋ค.
- ์ ๋ฆฌํ๋ฉด ์์ ์๋ฃํ์ ์ ์ฅํ์ฌ ์ฐธ์กฐํ๊ณ ์ค๋ณต์ ๋ง๋ ์ญํ ์ ์ํํ๋ค.
โ๏ธ ํ ์์ญ (Heap Area)
ํ ์์ญ์ ๋ฉ์๋ ์์ญ์ ํจ๊ป ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ฉฐ, JVM์ด ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ฐํ์ ์ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉํ๋ ์์ญ์ด๋ค.
์ฆ,ย new ์ฐ์ฐ์๋ก ์์ฑ๋๋ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, ๋ฐฐ์ด ํ์ ๋ฑ Reference Type์ด ์ ์ฅ๋๋ ๊ณณ์ด๋ค.
๋น์ฐํ Method Area ์์ญ์ ์ ์ฅ๋ ํด๋์ค๋ง์ด ์์ฑ์ด ๋์ด ์ ์ฌ๋๋ค.

๐ก Info
โป ํ ์์ญ์ ์ฌ์ฉ๊ธฐ๊ฐ
- ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ๋ช ์์ ์ผ๋ก null ์ ์ธ๋๊ธฐ ์ ๊น์ง
- GC(Garbage Collection) ๋์์ผ๋ก ์ ์ ๋๊ธฐ ์ ๊น์ง
์ ์ํ ์ ์ ํ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ Reference Type์ผ๋ก์, JVM ์คํ ์์ญ์ ๋ณ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์์ ์ฐธ์กฐ๋๋ค๋ ์ ์ด๋ค.
์ฆ, ํ์ ์ฐธ์กฐ ์ฃผ์๋ "์คํ"์ด ๊ฐ๊ณ ์๊ณ ํด๋น ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ํ ์์ญ์ ์๋ ์ธ์คํด์ค๋ฅผ ํธ๋ค๋งํ ์ ์๋ ๊ฒ์ด๋ค.

๋ง์ผ ์ฐธ์กฐํ๋ ๋ณ์๋ ํ๋๊ฐ ์๋ค๋ฉด ์๋ฏธ ์๋ ๊ฐ์ฒด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฐ๋ ๊ธฐ๋ก ์ทจ๊ธํ๊ณ JVM์ ์ฐ๋ ๊ธฐ ์์ง๊ธฐ์ธ Garbage Collector๋ฅผ ์คํ์์ผ ์ฐ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ํ ์์ญ์์ ์๋์ผ๋ก ์ ๊ฑฐ๋๋ค.
์ด์ฒ๋ผ ํ ์์ญ์ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ๋์์ด ๋๋ ๊ณต๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํจ์จ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํํ๊ธฐ ์ํด์ ์ธ๋ถ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด 5๊ฐ์ง ์์ญ์ผ๋ก ๋๋๊ฒ ๋๋ค.
Java8 ์ด์ ๊น์ง์ Heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ

์ด๋ ๊ฒ ๋ค์ฏ๊ฐ์ง ์์ญ(Eden, survivor 0, survivor 1, Old, Permanent)์ผ๋ก ๋๋ ํ ์์ญ์ ๋ค์ ๋ฌผ๋ฆฌ์ ์ผ๋ก Young Generation ๊ณผ Old Generation ์์ญ์ผ๋ก ๊ตฌ๋ถ๋๊ฒ ๋๋๋ฐ ๋ค์๊ณผ ๊ฐ๋ค.
Young Generation : ์๋ช
์ฃผ๊ธฐ๊ฐ ์งง์ ๊ฐ์ฒด๋ฅผ GC ๋์์ผ๋ก ํ๋ ์์ญ.Eden : new๋ฅผ ํตํด ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์์น. Eden ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด, Eden ์์ญ์ ์๋ ๊ฐ์ฒด๊ฐ Survivor1 ๋๋ Survivor2๋ก ์ฎ๊ฒจ์ง๋คSurvivor 0 / Survivor 1 : ๊ฐ ์์ญ์ด ์ฑ์์ง๊ฒ ๋๋ฉด, ๋จ์ ๊ฐ์ฒด๋ ๋น์์ง Survivor๋ก ์์ฐจ์ ์ผ๋ก ์ด๋. ์ด ๋ ๊ฐ์ ์์ญ ์ฌ์ด์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ์ ์๋๋ค.Old Generation : ์๋ช
์ฃผ๊ธฐ๊ฐ ๊ธด ๊ฐ์ฒด๋ฅผ GC ๋์์ผ๋ก ํ๋ ์์ญ. Youn Generation์์ ๋ง์ง๋ง๊น์ง ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋๐ก ์ค๋ซ๋์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด๋ผ๋ฉด, ์ผ๋ง๋ ์ค๋ซ๋์์ผ๊น?
์ค๋๋์๋ค๊ณ ํ๋ ๊ธฐ์ค์ Young Generation ์์ญ์์ Minor GC ๊ฐ ๋ฐ์ํ๋ ๋์ ์ผ๋ง๋ ์ค๋ ์ด์๋จ์๋์ง๋ก ํ๋จํ๋ค. ๊ฐ ๊ฐ์ฒด๋ Minor GC์์ ์ด์๋จ์ ํ์๋ฅผ ๊ธฐ๋กํ๋
age bit๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ,Minor GC๊ฐ ๋ฐ์ํ ๋๋ง๋ค age bit ๊ฐ์ 1์ฉ ์ฆ๊ฐํ๊ฒ๋๋ฉฐ, age bit ๊ฐ์ดMaxTenuringThreshold ๋ผ๋ ์ค์ ๊ฐ์ ์ด๊ณผํ๊ฒ ๋๋ ๊ฒฝ์ฐ Old Generation ์์ญ์ ๊ฐ์ฒด๊ฐ ์ด๋๋๋ ๊ฒ์ด๋ค. ๋๋ Age bit๊ฐ MaxTenuringThreshold ์ด๊ณผํ๊ธฐ ์ ์ด๋ผ๋ Survivor ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ์๋ ๋ฏธ๋ฆฌ Old Generation ์ผ๋ก ๊ฐ์ฒด๊ฐ ์ฎ๊ฒจ์ง ์๋ ์๋ค.
Old ์์ญ์์๋ 2์ฐจ GC์ธ Major GC(FULL GC)๊ฐ ์ผ์ด๋๊ฒ ๋๋ฉฐ GC๋ฅผ ์งํํ๋ Thread๋ฅผ ์ ์ธํ๊ณ ์ด์ธ์ ๋ชจ๋ Thread๋ฅผ ๋ฉ์ถ ์ํ๋ก GC๊ฐ ์งํ๋๋ค. ์ด์ ๊ฐ์ด GC๋ฅผ ์งํํ๋ Thread ์ด์ธ์ ๋ชจ๋ Thread๋ฅผ ๋ฉ์ถ๋ ์ํ๋ฅผ Stop-the-world๋ผ๊ณ ํ๋ฉฐ, ์ด๋ ํ GC์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋ผ๊ณ Stop-the-World ์ํ๋ฅผ ํผํ ์๋ ์๋ค.
JVM์ ๋ํด์ ์์ธํ ๊ณต๋ถํ๊ณ ์๋ค๋ฉด GCํ๋์ ๋ํด์ ๋ค์ด๋ณธ ์ ์ด ์์๊ฒ์ด๋ค. GC๋ฅผ ํ๋ํ๋ ์ด์ ๊ฐ ๋ฐ๋ก Stop-thr-world์ ์๊ฐ์ ์ต์ํ์ผ๋ก ์ค์ด๊ธฐ ์ํจ์ด๋ค.

Java8 ์ดํ์ Heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ


์์์ Heap๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ฉด์ ์ค๋ช ํ์ง ์์ ์์ญ์ด ํ๋ ์๋ค. ๋ฐ๋ก Permanent ์์ญ์ด๋ค.
Permanent ์์ญ์ ๊ฒฝ์ฐ Java8๋ถํฐ Metaspace ์์ญ์ผ๋ก ๋ณ๊ฒฝ๋์๋ค. ๊ธฐ์กด์(์๋ฐ8 ์ด์ ) Permanet ์์ญ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ค์ด ์ ์ฅ๋์๋ค.
- Class์ ๋ฉํ๋ฐ์ดํฐ (๋ฐ์ดํธ์ฝ๋ ํฌํจ)
- Method์ ๋ฉํ๋ฐ์ดํฐ
- static ๊ฐ์ฒด, static ์์
- ์์ํ๋ String Object
- Class์ ๊ด๋ จ๋ ๋ฐฐ์ด ๊ฐ์ฒด ๋ฉํ๋ฐ์ดํฐ
- JVM ๋ด๋ถ์ ์ธ ๊ฐ์ฒด๋ค๊ณผ JIT์ ์ต์ ํ ์ ๋ณด
์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๋ Permanent ์์ญ์ ์๋ฐ8์์๋ถํฐ๋ Metaspace๋ผ๋ ์์ญ์ผ๋ก ๋์ฒดํ์๊ณ , ์ด Metaspace์์ญ์ Native๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก JVM์ด ์๋ OS์ ์ํด ๊ด๋ฆฌ๋๋๋ก ๋ณ๊ฒฝ๋์๋ค.
- Class์ ๋ฉํ๋ฐ์ดํฐ (๋ฐ์ดํธ์ฝ๋ ํฌํจ) โ MetaSpace๋ก ์ด๋
- Method์ ๋ฉํ๋ฐ์ดํฐ โ MetaSpace๋ก ์ด๋
- static ๊ฐ์ฒด,static ๋ณ์ (class variable) โ Heap์ผ๋ก ์ด๋
- ์์ํ๋ String Object โ Heap์ผ๋ก ์ด๋
- Class์ ๊ด๋ จ๋ ๋ฐฐ์ด ๊ฐ์ฒด ๋ฉํ๋ฐ์ดํฐ โ Metaspace๋ก ์ด๋
- JVM ๋ด๋ถ์ ์ธ ๊ฐ์ฒด๋ค๊ณผ JIT์ ์ต์ ํ ์ ๋ณด โ Metaspace๋ก ์ด๋
์ฆ, ์๋ฐ8 ์ดํ๋ถํฐ Static Object๊ฐ Heap ์์ญ์ผ๋ก ์ฎ๊ฒจ์ ธ์ GC์ ๋์์ด ๋ ์ ์๊ฒ ํ์๋ค.
๊ฑฐ์ ๊ทธ๋ด์ผ์ ์์ง๋ง ๊ฐ๋์ฉ Collection ๊ฐ์ฒด๋ฅผ staticํ๊ฒ ๊ตฌํํ์ฌ ๊ฐ์ ๊ณ์ํด์ ์ถ๊ฐํ๋ค๊ฐ Perm์์ญ์ด ๊ฐ๋์ฐจ์ OutOfmemoryerror permgen space ๋ผ๋ Error๋ฅผ ๊ฒฝํํ ์๋ ์๋ค.
static List<Object> list = new ArrayList<>();
์ฆ, ์ด๋ฌํ OOM ์๋ฌ๊ฐ ๋ฐ์ํ๋ ํ์์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ธฐ์กด์ Perm ์์ญ์ ์ ์ฅ๋๋ static Obejct์ ๋ณ์์, ์์ํ๋ static Object๋ฅผ Heap์์ญ์ผ๋ก ์ด๋์์ผ GC์ ๋์์ด ๋๋๋ก ๋ณ๊ฒฝํ๊ณ , ๋ฉํ๋ฐ์ดํฐ ์ ๋ณด๋ค์ OS๊ฐ ๊ด๋ฆฌํ๋ ์์ญ์ผ๋ก ์ฎ๊ฒจ Perm ์์ญ์ ์ฌ์ด์ฆ ์ ํ์ ์์ค ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
"Metaspace ์์ญ์ Heap์ด ์๋ Native ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์๋ค. Heap ์์ญ์ JVM์ด ๊ด๋ฆฌํ๊ณ Native ์์ญ์ OS๋ ๋ฒจ์์ ๊ด๋ฆฌํด ์๋์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ , Metaspace๊ฐ Native ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ์์์ ์์ญํ๋ณด์ ์ํ์ ํฌ๊ฒ ์ธ์ํ ํ์๊ฐ ์๊ฒ ๋์๋ค. ์ด๊ฒ์ด Java 8์์ Metaspace๊ฐ ๋์ ๋ ์ด์ ์ด๋ค."
โ๏ธ ์คํ ์์ญ (Stack Area)
์คํ ์์ญ์ int, long, boolean ๋ฑย ๊ธฐ๋ณธ ์๋ฃํ์ ์์ฑํ ย ๋ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ์์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณ์๋ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ ์์ญ์ด๋ค.

์๋ฃ๊ตฌ์กฐ Stack์ ๋ง์ง๋ง์ ๋ค์ด์จ ๊ฐ์ด ๋จผ์ ๋๊ฐ๋ LIFOย ๊ตฌ์กฐ๋ก push์ pop ๊ธฐ๋ฅ ์ฌ์ฉ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๋ฉ์๋ ํธ์ถ ์๋ง๋ค ๊ฐ๊ฐ์ ์คํ ํ๋ ์(๊ทธ ๋ฉ์๋๋ง์ ์ํ ๊ณต๊ฐ)์ด ์์ฑ๋๊ณ ๋ฉ์๋ ์์์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ์ ์ฅํ๊ณ , ํธ์ถ๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ฆฌํด ๊ฐ ๋ฐ ์ฐ์ฐ ์ ์ผ์ด๋๋ ๊ฐ๋ค์ ์์๋ก ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฉ์๋ ์ํ์ด ๋๋๋ฉด ํ๋ ์๋ณ๋ก ์ญ์ ๋๋ค.
๐ก ์คํ ํ๋ ์(stack frame)
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํ๋ ์์ด ๋ง๋ค์ด์ง๋ฉฐ, ํ์ฌ ์คํ์ค์ธย ๋ฉ์๋ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๋ค. ๋ฉ์๋ ํธ์ถ ๋ฒ์๊ฐ ์ข ๋ฃ๋๋ฉด ์คํ์์ ์ ๊ฑฐ๋๋ค. ์คํ ํ๋ ์์ ์์ด๋ ๋ฐ์ดํฐ๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ฆฌํด๊ฐ, ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฑ์ด ์๋ค.
๋จ, ๋ฐ์ดํฐ์ ํ์ ์ ๋ฐ๋ผ ์คํ(stack) ๊ณผ ํ(haeap)์ ์ ์ฅ๋๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
์๋ฅผ๋ค์ดย Person p = new Person();ย ์ ๊ฐ์ด ํด๋์ค๋ฅผ ์์ฑํ ๊ฒฝ์ฐ,ย newย ์ ์ํด ์์ฑ๋ ํด๋์ค๋ย Heap Areaย ์ ์ ์ฅ๋๊ณ ,ย Stack Areaย ์๋ ์์ฑ๋ ํด๋์ค์ ์ฐธ์กฐ์ธย pย ๋ง ์ ์ฅ๋๋ค.

์คํ ์์ญ์ ๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ฉฐ, ์ค๋ ๋๊ฐ ์์๋ ๋ ํ ๋น๋๋ค.
ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ ๋ ๋ ์คํ ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด ์์ด, ๋ฐํ์ ์์ ์คํ ์ฌ์ด์ฆ๋ฅผ ๋ฐ๊ฟ ์๋ ์๋ค.
๋ง์ผ ๊ณ ์ ๋ ํฌ๊ธฐ์ JVM ์คํ์์ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ์ง ์๋ค๋ฉด StackOverFlowError๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ฐ๋ ๋๋ฅผ ์ข
๋ฃํ๋ฉด ๋ฐํ์ ์คํ๋ ์ฌ๋ผ์ง๋ค.

์ฌ๊ธฐ๊น์ง ๋ฐฐ์ด ๋ฉ์๋ ์์ญ, ํ ์์ญ, ์ค๋ ๋ ์์ญ์ ํ ๊ทธ๋ฆผ์ผ๋ก ํ์ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์์ด ๊ทธ๋ ค์ง๊ฒ ๋๋ค.

โ๏ธ PC ๋ ์ง์คํฐ (Program Counter Register)
PC Register์๋ ๋ฉํฐ ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ ํ ์ฐ๋ ๋๊ฐ ์์ ์ ํ๋ค๊ฐ ๋ค๋ฅธ ์ฐ๋ ๋๋ก CPU์์์ ๋๊ฒจ์ฃผ๊ณ ๋ค์ ๋ฐ์์ ๋, ์ด์ด์ ์์ ์ ํ๊ธฐ ์ํด ํ์ฌ ์คํ์ค์ธ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ธฐ๋กํ๋ค.
PC Register๋ ์ฐ๋ ๋๊ฐ ์์๋ ๋ ์์ฑ๋์ด ๊ฐ ์ฐ๋ ๋ ๋ณ๋ก ํ๋์ฉ ์กด์ฌํ๋ค.
JVM ๋ช ๋ น์ ์ฃผ์๋ ์ฐ๋ ๋๊ฐ ์ด๋ค ๋ถ๋ถ์ ๋ฌด์จ ๋ช ๋ น์ผ๋ก ์คํํด์ผํ ์ง์ ๋ํ ๊ธฐ๋ก์ ๊ฐ์ง๊ณ ์๋ค.

๋ง์ฝ ์ฐ๋ ๋๊ฐ JVM Instruction์ ์ํ์ค์ด๋ผ๋ฉด Instruction์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, Native Method๋ฅผ ์ํ์ค์ด๋ผ๋ฉด PC Register๋ Undefined์ํ๋ก ๋จ์์๊ณ , ์ด์ ๋ํ ์ฒ๋ฆฌ๋ ๋ฐ๋ก ๋ค์ ์ธ๊ธํ๊ฒ ๋ Native Method Stack์์ ๋ด๋นํ๋ค
โ๏ธ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack)
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ๋ ์๋ฐ ์ฝ๋๊ฐ ์ปดํ์ผ๋์ด ์์ฑ๋๋ ๋ฐ์ดํธ ์ฝ๋๊ฐ ์๋ ์ค์ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ์์ญ์ด๋ค.
๋ํ ์๋ฐ ์ด์ธ์ ์ธ์ด(C, C++, ์ด์ ๋ธ๋ฆฌ ๋ฑ)๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ ๊ณต๊ฐ์ด๊ธฐ๋ ํ๋ค.
์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก๋ ์ผ๋ฐ์ ์ธ C ์คํ์ ์ฌ์ฉํ๋ค.
์์์ ๋ฐฐ์ด JIT ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋ Native Code ์ญ์ ์ฌ๊ธฐ์์ ์คํ์ด ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค. (์์ง ์ดํด๊ฐ ์๋๋ฉด ์คํ ์์งย ์น์ ๋ถ๋ถ์ ๋ค์ ๋ณต์ตํ๊ณ ์ค์)

์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ JVM ์คํ์ ์์ด๋ค๊ฐ ํด๋น ๋ฉ์๋ ๋ด๋ถ์ ๋ค์ดํฐ๋ธ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ ์๋ค๋ฉด ํด๋น ๋ฉ์๋๋ ๋ค์ดํฐ๋ธ ์คํ์ ์์ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ดํฐ๋ธ ๋ฉ์๋๊ฐ ์ํ์ด ๋๋๋ฉด ๋ค์ ์๋ฐ ์คํ์ผ๋ก ๋์์ ๋ค์ ์์ ์ ์ํํ๋ค.
๊ทธ๋์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋์ด ์๋ ํจ์์ ํธ์ถ์ ์๋ฐ ํ๋ก๊ทธ๋จ ๋ด์์๋ ์ง์ ์ํํ ์ ์๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ฌ ์๋ ์๋ ๊ฒ์ด๋ค.
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๋ฐ๋ก ๋ค์์ ๋ฐฐ์ธ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์ธํฐํ์ด์ค(JNI)์ ์ฐ๊ฒฐ๋์ด ์๋๋ฐ, JNI๊ฐ ์ฌ์ฉ๋๋ฉด ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๋ฐ์ดํธ ์ฝ๋๋ก ์ ํ๋์ด ์ ์ฅ๋๊ฒ ๋๋ค.
โ๏ธ JNI (Java Native Interface)
JNI๋ ์๋ฐ๊ฐ ๋ค๋ฅธ ์ธ์ด๋ก ๋ง๋ค์ด์ง ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ์ํธ ์์ฉํ ์ ์๋ ์ธํฐํ์ด์ค ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์์์ ๋ค๋ค๋ดค๋ฏ์ด, JNI๋ JVM์ด Native Method๋ฅผ ์ ์ฌํ๊ณ ์ํํ ์ ์๋๋ก ํ๋ค.
ํ์ง๋ง ์ค์ง์ ์ผ๋ก ์ ๋๋ก ๋์ํ๋ ์ธ์ด๋ C / C++ ์ ๋ ๋ฐ์ ์๋ค๊ณ ํ๋ค.

โ๏ธ Native Method Library
C, C++๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์นญํ๋ค.
๋ง์ผ ํค๋( *.h )๊ฐ ํ์ํ๋ฉด JNI๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ฉํด ์คํํ๋ค.

๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํ์ค ์๋์ ์ ์๋ฐ ํ๋ซํผ์ผ๋ก ์๋ฐ ์ธ์ด์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณต
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค ํจํค์ง๋ก ๊ตฌ์ฑ
PC์ฉ ์ดํ๋ฆฌ์ผ์ด์ , ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ, ์์ฉํ๋ก๊ทธ๋จ ๊ฐ๋ฐ, ์น ๊ฐ๋ฐ, ์๋๋ก์ด๋ ๊ฐ๋ฐ ๋ฑ๋ฑ
PC์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๊ด๋ จ
๋๊ท๋ชจ ๊ธฐ์ ์ฉ ์๋์ ์ผ๋ก์ SE์ ํ์ฅํ(๋๊ท๋ชจ ํธ๋ํฝ์ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์)
๊ธฐ์ ํ๊ฒฝ์ ์ํ ๋๊ท๋ชจ ์๋ฃจ์ ๊ฐ๋ฐ, ๋ชจ๋ฐ์ผํฐ, ์ ํ ๋ฐ์ค, ์ฐจ๋์ฉ ํ ๋ ๋งคํฑ์ค ์์คํ ๊ฐ๋ฐ
ex) Servlet, JSP, EJB...
ํผ์ณํฐ, PDAํฐ, ์ ํฑ๋ฐ์ค, ํ๋ฆฐํฐ์ ๊ฐ์ ์์ ์๋ฒ ๋๋ ๊ธฐ๊ธฐ๋ค ๊ฐ์ ์์ ๊ธฐ๊ธฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ด์ฉํ๋ ์๋์
Reference
- JDK, JRE, JVM / JAVA SE, EE โฆ
- JRE(Java Runtime Environment)๋?
- Java ๋ฐํ์ ํ๊ฒฝ(JRE)์ด๋ ๋ฌด์์ธ๊ฐ์?
- [JAVA๊ธฐ์ด] JVM์ด๋?
- SDK๋ ๋ฌด์์ธ๊ฐ์?
- SDK์ API์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
- โ JDK / JRE / JVM ๊ฐ๋ & ๊ตฌ์ฑ ์๋ฆฌ ๐ฏ ์ด์ ๋ฆฌ
- โ JVM ๋ด๋ถ ๊ตฌ์กฐ & ๋ฉ๋ชจ๋ฆฌ ์์ญ ๐ฏ ์ด์ ๋ฆฌ
- #์๋ฐ๊ฐ์๋ฒ์ , JVM(Java Virtual Machine)์ด๋ ๋ฌด์์ธ๊ฐ?
- ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๋ Java ํ๋ก๊ทธ๋จ ์คํ ๊ณผ์
- JAVA8 ์ดํ์ heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ GC ์๊ณ ๋ฆฌ์ฆ
- JVM์ Java 8์์์ ๋ณํ
- [JAVA] JVM - Runtime Data Area