JVM์ด๋?
์คํ ๊ธฐ๋ฐ์ ์๋ฐ ๊ฐ์๋จธ์ ์ผ๋ก์ ํด๋์ค ํ์ผ์ ์คํํ ์ ์๋ค.
- JVM์ ์ญํ
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด๋ค์ด๊ณ ์๋ฐ API์ ํจ๊ป ์คํํ๋ ์ญํ
- JVM์ ํน์ง
- JAVA์ OS์ฌ์ด์์ ์ค๊ฐ์ ์ญํ ์ํ (OS ์ข ์์ ์ด์ง ์์) [JVM ์์ฒด๋ ์ด์์ฒด์ ์ ์์กด์ ์ด๋ฏ๋ก ๋ง๊ฒ ์ค์นํด์ผํจ]
- Garbage Collection์ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ค๋ค.
- JVM ๊ตฌ์ฑ
- Class Loader
- ์์ฑํ ์ธ์คํด์ค๊ฐ Runtime์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ฒ ํจ
- Runtime Data Areas
- JVM์ด ํ๋ก๊ทธ๋จ์ ์ํํ๊ธฐ ์ํด ๋ณ๋๋ก ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- PC Register, Java Virtual Machine Stack, Native Method Stack, Method Area, Heap
- JVM์ด ํ๋ก๊ทธ๋จ์ ์ํํ๊ธฐ ์ํด ๋ณ๋๋ก ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- Execution Engine
- Runtime Data Areas์ ๋ก๋๋ ๋ฐ์ดํธ ์ฝ๋๊ฐ Execution Engine์ ์ํด์ ์คํ๋จ
- Class Loader
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ
JVM ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ ์ค๋ช
- Method Area : ๋ฉ์๋์ ํด๋์ค ๋ณ์, ์ ๊ทผ ์ ์ด์, Type, ์์, static ๊ฐ์ ๋ณ์ ๋ฑ์ด ์์ฑ๋๋ ์์ญ (๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์ํด ๊ณต์ ๋จ)
- Heap Area : ์ฌ์ฉ์๊ฐ ์์ฑํ๋ Java Object๋ค์ด ์ ์ฅ๋๋ ๊ณต๊ฐ. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ด๋ฆฌ (๋์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉ)
- Stack Area : ๋ฉ์๋ ํธ์ถ ์ ํด๋น ๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ์์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ stack ๋ฉ๋ชจ๋ฆฌ
- Native method statck : ์๋ฐ ์ธ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ (C/C++๋ฑ์ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ์ํด)
- PC Register : ์ฐ๋ ๋๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก ํ์ฌ ์ฐ๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น์ ์ ์ฅํ๋ ์์ญ.
์ฐ๋ ๋๋ Method Area์ Heap Area๋ ๊ณต์ ํ๊ณ ๋๋จธ์ง ์์ญ์ ์ฐ๋ ๋๋ง๋ค ๊ฐ๊ฐ ์์ฑ๋๊ณ ๊ณต์ ๋์ง ์๋๋ค.
์๋ฐํ๋ก๊ทธ๋จ์ ์คํ ๊ณผ์
- ํ๋ก๊ทธ๋จ ์คํ ์ JVM์ด OS๋ก ๋ถํฐ ํ๋ก๊ทธ๋จ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋๋ค. (๋ฉ๋ชจ๋ฆฌ ํ ๋น)
- ์๋ฐ ์์ค์ฝ๋๋ฅผ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ์ํจ๋ค. (์ปดํ์ผ)
- ํด๋์ค ๋ก๋๋ฅผ ํตํด ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๋ ํด๋์ค ํ์ผ๋ค์ ๋ก๋ฉํ๋ค. (๋ฐ์ดํธ์ฝ๋ ๋ก๋ฉ)
- ๋ก๋ฉ๋ ํด๋์ค ํ์ผ์ด Execution engine์ ํตํด ํด์๋๋ค. (๋ช ๋ น์ด ์คํ)
- ํด์๋ ๋ฐ์ดํธ์ฝ๋๊ฐ Runtime Data Areas์ ๋ฐฐ์น๋์ด ํ๋ก๊ทธ๋จ์ ๋์์ด ์ด๋ค์ง๋ค. (๋ฐ์ดํฐ ์ ์ฌ)
Interpreter
Execution Engine์ด ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์ํํ๋ค. ํ ์ค์ฉ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
JIT(Just In Time)
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ํํ๋ค๊ฐ ์ผ์ ํ ๊ธฐ์ค์ ๋์ด๊ฐ๋ฉด ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํ์ํจ๋ค. ์ด ํ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๊ณ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ๋ค.
JIT๋ฅผ ์ฌ์ฉํ๋ JVM์ ํด๋น ๋ฉ์๋๊ฐ ์ผ๋ง๋ ์์ฃผ ์ฌ์ฉ๋๋์ง ์ฒดํฌํ๊ณ ์ผ์ ๊ธฐ์ค์ ๋์ด์๋ฉด ์ปดํ์ผ์ ์ํํ๊ฒ ๋๋ค.
Reference
'๐ญComputer Science๐ญ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2021.05.30 |
---|---|
[JAVA] ํจํค์ง์ ๋ํด.. (0) | 2021.04.16 |
[JAVA] Classpath : ํด๋์คํจ์ค (0) | 2021.04.05 |
[JAVA] ํด๋์ค (0) | 2021.04.05 |
[JAVA] primitive type๊ณผ reference type ์ฐจ์ด (0) | 2021.04.04 |