Java Virtual Machine
์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํ๋๋ ๋ฐํ์ ์์ง
Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
Java Application |
---|
JVM(Windows/Mac/Linux) |
OS(Windows/Mac/Linux) |
Computer(Hardware) |
์๋ฐ์ ํฐ ํน์ง ์ค ํ๋๋ ๊ฐ์ ํ๊ฒฝ์ธ JVM์ ์กด์ฌ์ธ๋ฐ, Computer -> OS -> JVM -> Java Application ๋ ์ด์ด ํํ๋ก JVM ์์์ ์คํ๋๋ค. ์ด๋ฌํ ํน์ง์ผ๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ฒ ๋๋ค.
ํ๋ซํผ ๋ ๋ฆฝ์ฑ: JVM ์์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ํ๋ซํผ์ด๋ ์ปดํ์ผ ๋ ์ฝ๋๊ฐ ์คํ๋ ์ ์์
JVM ํ์ ์กฐ๊ฑด: ์คํ์ ์ํด์๋ ๋ฐ๋์ JVM์ด ํ์ํจ
์ฑ๋ฅ ์ด์: JVM ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆด ์ ์์(์ต๊ทผ์ ์ปดํ์ผ๋ฌ์ ์ต์ ํ ๊ธฐ์ ๋ก ๊ทธ ์๋์ ๊ฒฉ์ฐจ๋ฅผ ๋ง์ด ์ค์)
Java ์คํ ๊ณผ์
Java Compiler: Java Source Code๋ฅผ Java Byte Code๋ก ๋ณํ
Class Loader: ๋ฐ์ดํธ ์ฝ๋ ๋ก๋ฉ / ๊ฒ์ฆ / ๋งํน ๋ฑ ์ํ
Runtime Data Area: ์ฑ ์คํ์ ์ํด ์ฌ์ฉ๋๋ JVM ๋ฉ๋ชจ๋ฆฌ ์์ญ
Execution Engine: ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํด๋นํ๋ ์์ ์ํ
์์ฑ๋ Java Source๋ฅผ Java Compiler๋ฅผ ํตํด Java Byte Code๋ก ๋ณํ
์ปดํ์ผ ๋ Byte Code๋ฅผ JVM์ Class Loader์ ์ ๋ฌ
Class Loader๋ Dynamic Loading์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ ๋ฐ ๋งํฌํ์ฌ Runtime Data Area(JVM Memory)๋ก ์ ๋ฌ
Execution Engine์ด ์ฌ๋ผ์จ Byte Code๋ค์ ๋ช ๋ น์ด ๋จ์๋ก ํ๋์ฉ ๊ฐ์ ธ์์ ์คํ
Class Loader์์ Class Loading ๊ณผ์
ํด๋์ค ๋ก๋๋ ์ปดํ์ผ๋ ์๋ฐ ํด๋์ค ํ์ผ(*.class)์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ํ๊ณ , Runtime Data Area์ ๋ฐฐ์นํ๋ ์ญํ ์ ํ๋ค. class ํ์ผ์ ๋ก๋ฉํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
Loading: ํด๋์ค ๋ก๋๊ฐ ํด๋์ค ํ์ผ์ ์ฝ์ด๋ค์ฌ JVM ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
Linking: ํด๋์ค ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฒ์ฆ
Initialization: ํด๋์ค ๋ณ์ ์ด๊ธฐํ
ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ Loading ๋จ๊ณ์์๋ ํด๋์ค๋ฅผ ๋ก๋ํ๋ ๊ท์น์ ๋ฐ๋ผ ํด๋์ค ๋ก๋๊ฐ ํด๋์ค ํ์ผ์ ์ฝ์ด๋ค์ธ๋ค.
๋ชจ๋ ํด๋์ค๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ํด๋์ค๋ง ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
static ๋ฉค๋ฒ๋ค ๋ํ ์ ๋ถ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ํด๋์ค ๋ด์ static ๋ฉค๋ฒ๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ํด๋์ค๊ฐ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
JDK & JRE & JVM
JVM(Java Virtual Machine): ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํ์ํค๊ธฐ ์ํ ๊ฐ์ ๋จธ์
JRE(Java Runtime Environment): ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ๋๊ตฌ(ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ์ ํ์ผ)๊ฐ ํฌํจ๋ ์คํ ํ๊ฒฝ
JDK(Java Development Kit): ์๋ฐ๋ก ๊ฐ๋ฐํ๊ธฐ ์ํ ํ์ ์์(javac ๋ฑ)๋ฅผ ํฌํจํ ๊ฐ๋ฐ ํคํธ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JVM ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ 5๊ฐ์ง ์์ญ์ผ๋ก ๋๋๋ฉฐ, ๊ฐ๊ฐ์ ์์ญ์ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํ๋ค.
์์ญ | ์ฉ๋ | ์๋ช ์ฃผ๊ธฐ | ์ค๋ ๋ ๊ณต์ ์ฌ๋ถ |
---|---|---|---|
Method | ํด๋์ค ์ ๋ณด, ํด๋์ค(static) ๋ณ์, ์์, ๋ฉ์๋ ์ฝ๋ | JVM ์์ ~ ์ข ๋ฃ | O |
Heap | ๊ฐ์ฒด ์ธ์คํด์ค, ์ธ์คํด์ค ๋ณ์ |
| O |
Stack | ์ฐ๋ ๋ ๋ณ๋ก ๋ฐํ์์ ํธ์ถ ๋ ๋ฉ์๋, ์ง์ญ ๋ณ์, ๋งค๊ฐ ๋ณ์, ๋ฆฌํด ๊ฐ | ๋ฉ์๋ ์ข ๋ฃ ์ | X |
์ด์ธ์๋ ์ฐ๋ ๋์ ๋ช
๋ น์ด ์ฃผ์๊ฐ ์ ์ฅ๋๋ PC Register
์๋ฐ ์ธ์ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ ์ ์ฅ๋๋ Native Method Stack
์ด ์กด์ฌํ๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated