JVM(Java Virtual Machine)
- Java๋ก ๊ฐ๋ฐํ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ๊ฐ์๋จธ์ . ์๋ฐ ๊ฐ์ ๋จธ์ ์ ๋ปํ๋ ๋ง๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ฃผ์ฒด์ด๋ค. ์ด์์ฒด์ ์์์ ๋์ํ๋ฏ๋ก ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ผ๋ก Java ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค.
- ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ต์ ํํ๋ ๊ฒ
๋ฌผ๋ฆฌ์ ์ธ ์ค์ ์ ๊ธฐ๊ณ๊ฐ ์๋๋ผ ์ถ์์ ์ธ ์ฅ์น์ด๋ค.
์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๋ก๋(Class Loader)๋ฅผ ํตํด ์ฝ์ด ๋ค์ฌ์ ์๋ฐ API์ ํจ๊ป ์คํํ๋ ๊ฒ
์๋ฐ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ์๋ฐ์์ javac ๋ช ๋ น์ ํตํด ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ๋ง๋ค๊ณ , ๋ฐ์ดํธ์ฝ๋๋ฅผ JVM์ด ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ฉฐ ์คํํ๋ค.
JVM ๊ตฌ์ฑ์์
1. Class Loader
JVM์ ๋ฐํ์์์ ์ฒ์์ผ๋ก ํด๋์ค๋ฅผ ์ฐธ์กฐํ ๋ ํด๋น ํด๋์ค๋ฅผ ๋ก๋ํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐฐ์น์ํด. ์ด ๋์ ๋ก๋๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ์ด ๋ฐ๋ก ํด๋์ค ๋ก๋
2. GC (Garbage Collector)
์๋ฐ ์ด์ ์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ชจ๋ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ ํ์ง๋ง, ์๋ฐ์์๋ JVM์ด ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํจ!
JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ผ๋ ํ๋ก์ธ์ค๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํจ. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์์ ์ผ๋ก ์ฐพ์๋ด์ ์ ๊ฑฐํ๋ ์ญํ ์ ํจ.
์คํ์์ : ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ญ์ → ์ญ์ ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ฐํ → ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ
3. Execution Engine
ํด๋์ค ๋ก๋๋ฅผ ํตํด JVM ๋ด์ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฐฐ์น๋ ๋ฐ์ดํธ์ฝ๋๋ ์คํ ์์ง์ ์ํด ์คํ๋๋ค. ์คํ ์์ง์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค.
- ์ธํฐํ๋ฆฌํฐ
- JIT(Just-In-Time) ์ปดํ์ผ๋ฌ
JIT ์ปดํ์ผ๋ฌ
์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ๊ฒ์ด JIT ์ปดํ์ผ๋ฌ์ด๋ค. ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์(์คํ์์ ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ์คํํ๋ ๊ฒ)์ผ๋ก ์คํํ๋ค๊ฐ ์ ์ ํ ์์ ์ ๋ฐ์ดํธ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ณ , ์ดํ์๋ ํด๋น ๋ฉ์๋๋ฅผ ๋ ์ด์ ์ธํฐํ๋ฆฌํ ํ์ง ์๊ณ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค. ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด ํ๋์ฉ ์ธํฐํ๋ฆฌํ ํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๊ณ , ๋ค์ดํฐ๋ธ ์ฝ๋๋ ์บ์์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์ปดํ์ผ๋ ์ฝ๋๋ ๊ณ์ ๋น ๋ฅด๊ฒ ์ํ๋๊ฒ ๋๋ค.
(= ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์คํ์ค์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ์ค์ฉ ์ฝ์ผ๋ฉด์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋ฉ์๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์ค๋ณตํด์ ๋ฒ์ญํ๋ ๋นํจ์จ์ด ์๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฒ์ญํ ๋ด์ฉ์ ์บ์ฑํด ๋์๋ค๊ฐ ๋์ผํ ๋ฉ์๋๋ฅผ ์คํํ ๊ฒฝ์ฐ ์บ์ฑ๋ ๋ด์ฉ์ ์คํํ๋ค.)
∴ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์(์คํ์ค ํ ์ค์ฉ ์ฝ์ผ๋ฉฐ ์คํ)๊ณผ ์ ์ ์ปดํ์ผ ๋ฐฉ์(์คํํ๊ธฐ ์ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ - ์บ์ฑ)์ด ํผํฉ๋ ํํ
JIT ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ ๊ณผ์ ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ๋์ฉ ์ธํฐํ๋ฆฌํ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก, ๋ง์ฝ ํ ๋ฒ๋ง ์คํ๋๋ ์ฝ๋๋ผ๋ฉด ์ปดํ์ผํ์ง ์๊ณ ์ธํฐํ๋ฆฌํ ํ๋ ๊ฒ์ด ํจ์ฌ ์ ๋ฆฌํ๋ค. ๋ฐ๋ผ์, JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ JVM๋ค์ ๋ด๋ถ์ ์ผ๋ก ํด๋น ๋ฉ์๋๊ฐ ์ผ๋ง๋ ์์ฃผ ์ํ๋๋์ง ์ฒดํฌํ๊ณ , ์ผ์ ์ ๋๋ฅผ ๋์ ๋์๋ง ์ปดํ์ผ์ ์ํํ๋ค.
4. Runtime Data Area
JVM์ด ์ด์์ฒด์ ์์์ ์คํ๋๋ฉด์ ํ ๋น๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์
์ด 5๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ด์ง : PC ๋ ์ง์คํฐ, JVM ์คํ, ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ, ํ, ๋ฉ์๋ ์์ญ
(์ด ์ค์ ํ๊ณผ ๋ฉ์๋ ์์ญ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉํจ)
- PC register(PC ๋ ์ง์คํฐ) : ์ค๋ ๋๊ฐ ์ด๋ค ๋ช ๋ น์ด๋ก ์คํ๋์ด์ผ ํ ์ง ๊ธฐ๋กํ๋ ๋ถ๋ถ(JVM ๋ช ๋ น์ ์ฃผ์๋ฅผ ๊ฐ์ง)
- Stack Area(์คํ ์์ญ, JVM ์คํ) : ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฉ์๋ ์ ๋ณด, ์์ ๋ฐ์ดํฐ ๋ฑ์ ์ ์ฅ. ์ค๋ ๋ ๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ฉฐ ์ค๋ ๋๊ฐ ์์๋ ๋ ์์ฑ๋๋ค.
- Native Method Stack(๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ) : ์ค์ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ์์ญ
- Heap(ํ) : ๋ฐํ์์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญ. ๊ฐ์ฒด๋ ๋ฐฐ์ด ์์ฑ์ด ์ฌ๊ธฐ์ ํด๋นํจ
- (๋ํ ํ์ ํ ๋น๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ๋น์ง์ปฌ๋ ํฐ์ ๋์์ด ๋จ. JVM ์ฑ๋ฅ ์ด์์์ ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋๋ ๊ณต๊ฐ์)
- Class Area(static ์์ญ, ๋ฉ์๋ ์์ญ, ๋ฐ์ดํฐ ์์ญ) : ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ผ๋ก JVM์ด ์์๋ ๋ ์์ฑ๋๋ค. JVM์ด ์ฝ์ ๊ฐ๊ฐ์ ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ํ ๋ฐํ์ ์์ ํ, ํ๋ ๋ฐ ๋ฉ์๋ ์ฝ๋, ์ ์ (static) ๋ณ์, ๋ฉ์๋์ ๋ฐ์ดํธ ์ฝ๋ ๋ฑ์ ๋ณด๊ดํจ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์คํ ๊ณผ์
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ OS๋ก๋ถํฐ ํด๋น ํ๋ก๊ทธ๋จ์ด ํ์๋กํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ , ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
- ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ ์ฝ๋(.java)๋ฅผ ์ฝ์ด ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ์ํจ๋ค.
- ํด๋์ค ๋ก๋๋ classํ์ผ๋ค์ JVM์ผ๋ก ๋ก๋ฉํ๋ค.
- ๋ก๋ฉ๋ classํ์ผ๋ค์ ์คํ ์์ง(Execution engine)์ ํตํด์ ํด์๋๋ค.
- ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ Runtime Data Areas(๋ฉ๋ชจ๋ฆฌ ์์ญ)์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฌํ ์คํ๊ณผ์ ์์์ JVM์ ํ์์ ๋ฐ๋ผ ์ค๋ ๋ ๋๊ธฐํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์ ์ ์ํํ๋ค.
์ปดํ์ผ ํ๋ค = .java ํ์ผ์ .class(๋ฐ์ดํธ์ฝ๋)๋ก ๋ง๋ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฐธ๊ณ
'๐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์คํธ๋ฆผ Stream (0) | 2021.07.28 |
---|---|
[Java] ์ ๋ค๋ฆญ(Generic) (0) | 2021.07.28 |
[Java] Primitive type vs Reference type (0) | 2021.04.18 |
[Java] HashMap, LinkedHashMap, TreeMap, Hashtable ์ฐจ์ด (0) | 2021.04.03 |
[Java] ==, equals, instanceof (0) | 2020.09.09 |
๋๊ธ