JVM
JVM ๊ตฌ์กฐ์ ๋ํด์ ์ค๋ช
ํด ์ฃผ์ธ์.
JVM์ ๋์ ๋ฐฉ์

์๋ฐ ๊ฐ์ ๋จธ์ (JVM : Java Virtual Machine) ์ ์ญํ ์ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด ์๋ฐ API์ ํจ๊ป ์คํํ๋ ๊ฒ์ด๋ค.
์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด JVM OS๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋๋ค.
์๋ฐ ์ปดํ์ผ๋ฌ(
javac)๊ฐ ์๋ฐ ์์ค์ฝ๋(.java)๋ฅผ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋(.class)๋ก ์ปดํ์ผํ๋ค.Class Loader๋ ๋์ ๋ก๋ฉ์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ ๋ฐ ๋งํฌ ํ์ฌ Runtime Data Area(์ค์ง์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ๊ด๋ฆฌํ๋ ์์ญ)์ ์ฌ๋ฆฐ๋ค.
Runtime Data Area์ ๋ก๋ฉ๋ ๋ฐ์ดํธ ์ฝ๋๋ Execution Engine์ ํตํด ํด์๋๋ค.
์ด ๊ณผ์ ์์ Execution Engine์ ์ํด ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์๋๊ณผ ์ฐ๋ ๋ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
JVM ๊ตฌ์กฐ ์์ฝ
JVM์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ๊ฐ์์ ์ปดํจํฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด๋ค.
ํด๋์ค ๋ก๋(
Class Loader)
์๋ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ํด๋์ค ํ์ผ๋ค์ ์ฝ์ด์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ ํ๋ ์ญํ ์ ํ๋ค.
๋ฉ์๋ ์์ญ(
Method Area)
ํด๋์ค ๋ณ์์ ๋ฉ์๋์ ๊ดํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์ญ์ด๋ค.
ํ ์์ญ(
Heap Area)
์ธ์คํด์ค ๋ณ์์ ์์์ ๊ดํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์ญ์ด๋ค.
์คํ ์์ญ(
Stack Area)
ํธ์ถ๋ ๋ฉ์๋์ ์คํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์ญ์ด๋ค.
PC ๋ ์ง์คํฐ(
Program Counter Register)
ํ์ฌ ์คํ๋๊ณ ์๋ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ์ด๋ค.
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ(
Native Method Stack)
JVM์์ ์คํํ ์ ์๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ์ํ ์คํ์ด๋ค.
JVM ๊ตฌ์กฐ ์์ธ

ํด๋์ค ๋ก๋ (Class Loader)

ํด๋์ค ๋ก๋๋ JVM ๋ด๋ก ํด๋์ค ํ์ผ(
*.class)์ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ , ๋งํฌ๋ฅผ ํตํด ๋ฐฐ์นํ๋ ์์ ์ ์ํํ๋ค.์ฆ, ๋ก๋๋ ๋ฐ์ดํธ ์ฝ๋(
.class)๋ค์ ์ฎ์ด์ JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Areas์ ๋ฐฐ์นํ๋ค.ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ก๋ฉ ๊ธฐ๋ฅ์ ํ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ์ง ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ํ ๊ฒฝ์ฐ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๊ฒ ๋๋ค.
ํด๋์ค ํ์ผ ๋ก๋ฉ ์์

Loading(๋ก๋) : ํด๋์ค ํ์ผ์ ๊ฐ์ ธ์์ JVM์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
Linking(๋งํฌ) : ํด๋์ค ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฒ์ฆํ๋ ๊ณผ์
Verifying(๊ฒ์ฆ) : ์ฝ์ด๋ค์ธ ํด๋์ค๊ฐ JVM ๋ช ์ธ์ ๋ช ์๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ๊ฒ์ฌ
Preparing(์ค๋น) : ํด๋์ค๊ฐ ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น
Resolving(๋ถ์) : ํด๋์ค์ ์์ ํ ๋ด ๋ชจ๋ ์ฌ๋ณผ๋ฆญ ๋ ํผ๋ฐ์ค๋ฅผ ๋ค์ด๋ ํธ ๋ ํผ๋ฐ์ค๋ก ๋ณ๊ฒฝ
Initialization(์ด๊ธฐํ) : ํด๋์ค ๋ณ์๋ค์ ์ ์ ํ ๊ฐ์ผ๋ก ์ด๊ธฐํ(
staticํ๋๋ค์ ์ค์ ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ,int = 0๋ฑ)
์คํ ์์ง (Execution Engine)
์คํ ์์ง์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฐฐ์น๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค.
์๋ฐ ๋ฐ์ดํธ ์ฝ๋(
*.class)๋ ๊ธฐ๊ณ๊ฐ ๋ฐ๋ก ์ํํ ์ ์๋ ์ธ์ด๋ณด๋ค๋ JVM์ด ์ดํดํ ์ ์๋ ์ค๊ฐ ๋ ๋ฒจ๋ก ์ปดํ์ผ ๋ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์, ์คํ ์์ง์ ์ด์ ๊ฐ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ค์ ๋ก JVM ๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ํํ๋ก ๋ณ๊ฒฝํด์ค๋ค.์ด ์ํ ๊ณผ์ ์์ ์คํ ์์ง์ ์ธํฐํ๋ฆฌํฐ์ JIT ์ปดํ์ผ๋ฌ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ค.

์ธํฐํ๋ฆฌํฐ
๋ฐ์ดํธ ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์ฝ์ด์ ํด์ํ๊ณ ๋ฐ๋ก ์คํํ๋ค.
JVM ์์์ ๋ฐ์ดํธ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๊ฐ์ ๋ฉ์๋๋ผ๋ ์ฌ๋ฌ ๋ฒ ํธ์ถ ๋๋ฉด ๋งค๋ฒ ํด์ํ๊ณ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ ์๋๋ ๋๋ฆฌ๋ค.
JIT ์ปดํ์ผ๋ฌ
์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ๋ฐฉ์์ด๋ค.
๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ฌ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ
Native Code๋ก ๋ณ๊ฒฝํ๊ณ , ์ดํ์๋ ํด๋น ๋ฉ์๋๋ฅผ ๋ ์ด์ ์ธํฐํ๋ฆฌํ ํ์ง ์๊ณ ์บ์ฑํด ๋์๋ค๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค.ํ๋์ฉ ์ธํฐํ๋ฆฌํ ํ์ฌ ์คํํ์ง ์๊ณ , ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์คํ ์๋๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์๋ณด๋ค ๋น ๋ฅด๋ค.
ํ์ง๋ง ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํ๋ ๋ฐ์๋ ๋น์ฉ์ด ์์๋๋ฏ๋ก,
JVM์ ๋ชจ๋ ์ฝ๋๋ฅผ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ์คํํ์ง ์๊ณ , ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ฐ ์ผ์ ์์ค์ด ๋์ด๊ฐ๋ฉด JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์์ผ๋ก ์งํํ๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ
JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํ์ฌ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํด์ค๋ค.
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ (Runtime Data Area)

๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ์ด๋ค.

Method Area, Heap Area๋ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ด๊ณ , ๋๋จธ์ง Stack Area, PC Register, Native Method Stack์ ๊ฐ ์ฐ๋ ๋๋ง๋ค ์์ฑ๋๋ ๊ฐ๋ณ ์์ญ์ด๋ค.

๋ฉ์๋ ์์ญ (Method Area)
Class Area๋Static Area๋ก๋ ๋ถ๋ฆฐ๋ค.๋ฉ์๋ ์์ญ์ JVM์ด ์์๋ ๋ ์์ฑ๋๋ ๊ณต๊ฐ์ผ๋ก, ๋ฐ์ดํธ ์ฝ๋(
.class)๋ฅผ ์ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ๋ฆด ๋ ์ด๊ธฐํ๋๋ ๋์์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.JVM์ด ๋์ํ๊ณ ํด๋์ค๊ฐ ๋ก๋๋ ๋ ์ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ฅ๋๋ค.
๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ด๋ผ ๋ค์๊ณผ ๊ฐ์ ์ด๊ธฐํ ์ฝ๋ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ค.
Field Info : ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์ , ์ ๊ทผ ์ ์ด์์ ์ ๋ณด
Method Info : ๋ฉ์๋ ์ด๋ฆ, ๋ฆฌํด ํ์ , ํจ์ ๋งค๊ฐ๋ณ์, ์ ๊ทผ ์ ์ด์์ ์ ๋ณด
Type Info :
Class์ธ์งInterface์ธ์ง ์ฌ๋ถ ์ ์ฅ,Type์ ์์ฑ, ์ด๋ฆ,Super Class์ ์ด๋ฆ
์ ์ ํ๋์ ํด๋์ค ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒ์ด๋ค.

ํ ์์ญ (Heap Area)
ํ ์์ญ์ ๋ฉ์๋ ์์ญ๊ณผ ํจ๊ป ๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๋ฉฐ, JVM์ด ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ฐํ์ ์ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉํ๋ ์์ญ์ด๋ค.
new์ฐ์ฐ์๋ก ์์ฑ๋๋ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, ๋ฐฐ์ด ํ์ ๋ฑ ์ฐธ์กฐํ(Reference Type)์ด ์ ์ฅ๋๋ ๊ณณ์ด๋ค.

์ ์ํ ์ ์, ํ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด ๋ฑ์ Reference Type์ผ๋ก์, JVM ์คํ ์์ญ์ ๋ณ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์์ ์ฐธ์กฐ๋๋ค๋ ์ ์ด๋ค.
์ฆ, ํ์ ์ฐธ์กฐ ์ฃผ์๋ ์คํ์ด ๊ฐ๊ณ ์๊ณ ํด๋น ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ํ ์์ญ์ ์๋ ์ธ์คํด์ค๋ฅผ ํธ๋ค๋งํ ์ ์๋ ๊ฒ์ด๋ค.

ํ์ ๊ฐ์ฒด๋ ์คํ์ ์ฐธ์กฐ ํ์ ๋ณ์์ ์ฐ๊ฒฐ๋์ด ์๋ค.
๋ง์ฝ ์ฐธ์กฐํ๋ ๋ณ์๋ ํ๋๊ฐ ์๋ค๋ฉด ์๋ฏธ์๋ ๊ฐ์ฒด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฐ๋ ๊ธฐ๋ก ์ทจ๊ธํ๊ณ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์คํ์์ผ ์ฐ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ํ ์์ญ์์ ์๋์ผ๋ก ์ ๊ฑฐํ๋ค.
์ด์ฒ๋ผ ํ ์์ญ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ ๊ณต๊ฐ์ด๋ค.
์คํ ์์ญ (Stack Area)
์คํ ์์ญ์
int,long,boolean๋ฑ ๊ธฐ๋ณธ ์๋ฃํ์ ์์ฑํ ๋ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ์์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณ์๋ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ ์์ญ์ด๋ค.

๋ฉ์๋ ํธ์ถ ์๋ง๋ค ๊ฐ๊ฐ์ ์คํ ํ๋ ์(๊ทธ ๋ฉ์๋๋ง์ ์ํ ๊ณต๊ฐ) ์ด ์์ฑ๋๊ณ , ๋ฉ์๋ ์์์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ์ ์ฅํ๊ณ , ํธ์ถ๋ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ฆฌํด ๊ฐ ๋ฐ ์ฐ์ฐ ์ ์ผ์ด๋๋ ๊ฐ๋ค์ ์์๋ก ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฉ์๋ ์ํ์ด ๋๋๋ฉด ํ๋ ์๋ณ๋ก ์ญ์ ๋๋ค.
๋ฐ์ดํฐ์ ํ์ ์ ๋ฐ๋ผ ์คํ๊ณผ ํ์ ์ ์ฅ๋๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
๊ธฐ๋ณธ(์์) ํ์ ๋ณ์๋ ์คํ ์์ญ์ ์ง์ ๊ฐ์ ๊ฐ์ง๋ค.
์ฐธ์กฐํ์ ๋ณ์๋ ํ ์์ญ์ด๋ ๋ฉ์๋ ์์ญ์ ๊ฐ์ฒด ์ฃผ์๋ฅผ ๊ฐ์ง๋ค.

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


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

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

์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ JVM ์คํ์ ์์ด๋ค๊ฐ ํด๋น ๋ฉ์๋ ๋ด๋ถ์ ๋ค์ดํฐ๋ธ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ ์๋ค๋ฉด, ํด๋น ๋ฉ์๋๋ ๋ค์ดํฐ๋ธ ์คํ์ ์์ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ดํฐ๋ธ ๋ฉ์๋๊ฐ ์ํ์ด ๋๋๋ฉด ๋ค์ ์๋ฐ ์คํ์ผ๋ก ๋์์ ์์ ์ ์ํํ๋ค.
๊ทธ๋์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋์ด ์๋ ํจ์์ ํธ์ถ์ ์๋ฐ ํ๋ก๊ทธ๋จ ๋ด์์๋ ์ง์ ์ํํ ์ ์๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ฌ ์๋ ์๋ ๊ฒ์ด๋ค.
JNI (Native Method Interface)
JVM์ ์ํด ์คํ๋๋ ์ฝ๋ ์ค ๋ค์ดํฐ๋ธ๋ก ์คํํ๋ ๊ฒ์ด ์๋ค๋ฉด ํด๋น ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ํธ์ถ๋ ์ ์๋๋ก ๋ง๋ ์ผ์ข ์ ํ๋ ์์ํฌ
Navite Method Library
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ผฌ๋ฆฌ ์ง๋ฌธ - JVM ํ๋์ ์ด๋ค ์์ผ๋ก ์งํ๋๋์?
JVM ํ๋์ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉฐ ์งํ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ถ์
JVM์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์์ค ์ฌ์ฉ ์ํ ๋ถ์
๋ฉ๋ชจ๋ฆฌ ํ๋
JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ ์ต์ ํ, GC ์ค์ ๋ฑ
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
์ ํ๋ฆฌ์ผ์ด์ ์ JVM ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
ํ๋ ํ๊ฐ
์์ ํ JVM ํ๋ ์ค์ ์ ํจ๊ณผ ํ๊ฐ
์์ ๋ฐ๋ณต
ํจ๊ณผ๊ฐ ๋ง์กฑ์ค๋ฌ์ด ๊ฒฝ์ฐ ์ข ๋ฃ, ๊ทธ๋ ์ง ์์ผ๋ฉด 2๋จ๊ณ๋ถํฐ ๋ค์ ๋ฐ๋ณต
๋ง์ง๋ง 5๋ฒ, ์์ ๋ฐ๋ณต์ด ์ค์ํ ๋ถ๋ถ์ด๋ค. ๊ณ์ํด์ ํผ๋๋ฐฑ์ ์ ์ฉ์ํค๋ ๋ฉ์ปค๋์ฆ์ผ๋ก ์งํ๋๋ค.
์ฐธ๊ณ
Last updated