๋ฐ์ํ
1. JVM(Java Virtual Machine)
- ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ฝ์๋ก ์๋ฐ ํ๋ก๊ทธ๋จ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด ๋ค์ฌ, ์๋ฐ API์ ํจ๊ป ์คํํ๋ ์ญํ
- JAVA์ OS ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ์ํ, JAVA๊ฐ OS์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์คํ
- Garbage Collection, ์ฆ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํ๋ฉฐ ์ต์ ํ ์ํ
2. Java ํ๋ก๊ทธ๋จ ์คํ ์์
- Java ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ OS๋ก๋ถํฐ ํด๋น ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น, JVM์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌ
- ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ ์์ค ์ฝ๋(.java)๋ฅผ ์ฝ์ด ๋ค์ฌ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋(.class)๋ก ๋ณํ
- Class Loader๋ฅผ ํตํด ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ JVM Runtime Data Areas(๋ฉ๋ชจ๋ฆฌ ์์ญ)๋ก ๋ก๋ฉ
- ๋ก๋ฉ๋ ๋ฐ์ดํธ ์ฝ๋๋ค์ Execution Engine์ ํตํด ํด์
- ํด์๋ ๋ฐ์ดํธ ์ฝ๋๋ JVM Runtime Data Areas(๋ฉ๋ชจ๋ฆฌ ์์ญ)์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฌํ ์คํ๊ณผ์ ์์ JVM์ ํ์์ ๋ฐ๋ผ Garbage Collection๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์ ์ ์ํ
3. JVM ๊ตฌ์ฑ
- Class Loader (ํด๋์ค ๋ก๋)
- Java๋ ๋์ ์ผ๋ก ํด๋์ค(.class ํ์ผ)๋ฅผ ์ฝ์ด์ค๋ฏ๋ก, ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ Runtime์์ ๋ชจ๋ ์ฝ๋๊ฐ JVM๊ณผ ์ฐ๊ฒฐ๋๋ค. ์ด๋ ๊ฒ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ก๋ฉํด์ฃผ๋ ์ญํ
- Java์์ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด .javaํ์ผ์ด ์์ฑ๋๊ณ ์ด๊ฒ์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ฉด .classํ์ผ์ด ์์ฑ๋๋๋ฐ ํด๋์ค ๋ก๋๋ .class ํ์ผ์ ๋ฌถ์ด์ JVM์ด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Area๋ก ๋ก๋ฉ
- Exectuion Engine (์คํ ์์ง)
- ํด๋์ค๋ฅผ ์คํ์ํค๋ ์ญํ
- Class Loader๊ฐ JVM๋ด์ Runtime Data Area์ ๋ฐ์ดํธ ์ฝ๋(.class)๋ฅผ ๋ฐฐ์น์ํค๋ฉด Exectuon Engine(์คํ ์์ง)์ ์ํด ์คํ
- ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ ๊ธฐ๊ณ๊ฐ ๋ฐ๋ก ์ํํ ์ ์๋ ํํ๋ก ๊ธฐ์ ๋์ด ์์ง ์์ง๋ง, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์คํ ์์ง์ ์ด ์๋นํธ ์ฝ๋๋ฅผ ์ค์ ๋ก JVM ๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ํํ๋ก ๋ณ๊ฒฝ
- Interpreter
- ๋ฐ์ดํธ ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์ฝ์ด์ ํด์ํ๊ณ ์คํํ๋ ๋ฐฉ์
- ๋จ, ์ ์ฒด์ ์ธ ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค.
- JIT(Just-In-Time) Compiler
- ์ธํฐํ๋ฆฌํฐ(Interpreter)์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์
- ์คํํ๋ค๊ฐ ์ ์ ํ ์์ ์ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํด Native Code๋ก ๋ณ๊ฒฝ, ์ดํ์๋ ๋์ด์ ์ธํฐํ๋ฆฌํ ํ์ง ์๊ณ Native Code๋ก ์ง์ ์คํ ํ๋ ๋ฐฉ์
- Native Code๋ ์บ์(Cache)์ ๋ณด๊ดํด ์ดํ ์ปดํ์ผ ์ ๋ฐ๋ ๋ถ๋ถ๋ง ์ปดํ์ผ, ๋๋จธ์ง๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์ปดํ์ผ๋ ์ฝ๋๋ ๋น ๋ฅด๊ฒ ์ํ
- Garbage Collector (๊ฐ๋น์ง ์ปฌ๋ ํฐ)
- JVM์ Garbage Collector(๊ฐ๋น์ง ์ปฌ๋ ํฐ)๋ฅผ ์ด์ฉํด ๋๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ํ์
- Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ(์ ์ )๋ ๊ฐ์ฒปใน ์ค์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ
- GC ์ญํ ์ ์ํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ค๋ ๋๋ค์ ์ผ์ ์ ์ง ์ํ
4. Runtime Data Area
- ํ๋ก๊ทธ๋จ์ ์ํํ๊ธฐ ์ํด OS์์ ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ
๋ชจ๋ ์ค๋ ๋(Thread)๊ฐ ๊ณต์ ํด์ ์ฌ์ฉ (GC์ ๋์)
- ํ ์์ญ(Heap Area)
- ๋ฉ์๋ ์์ญ(Method Area)
โก๏ธ JVM์ด ์์๋ ๋ ์์ฑ, JVM์ด ์ข ๋ฃ๋๋ฉด ํด์
์ค๋ ๋(Thread)๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ๋์ฉ ์์ฑ
- ์คํ ์์ญ(Stack Area)
- PC ๋ ์ง์คํฐ (PC Register)
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack)
โก๏ธ ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ ์์ฑ, ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ํด์
4-1. ํ ์์ญ (Heap Area)
- Runtime์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญ
- new ํค์๋๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์์ฑ๋๋ฉด ํ ์์ญ์ ์ ์ฅ
- ํ ๋น๋ ๊ฐ์ฒด๋ ์ง์ ํด์ ๊ฐ ๋ถ๊ฐ๋ฅ, ์ฃผ๊ธฐ์ ์ผ๋ก GC๊ฐ ์ ๊ฑฐ
4-2. ๋ฉ์๋ ์์ญ (Method Area)
- ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์ , ์ ๊ทผ ์ ์ด์ ์ ๋ณด์ ๊ฐ์ ํ๋ ์ ๋ณด๋ค๊ณผ ๋ฉ์๋ ์ ๋ณด Constant Pool, static ๋ณ์, final class ๋ฑ์ด ์์ฑ๋๋ ์์ญ
4-3. ์คํ ์์ญ (Stack Area)
- ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ), ๋ฆฌํด ๊ฐ, ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ์์ ๊ฐ ๋ฑ์ ์ ์ฅํ๋ ์์ญ
4-4. PC ๋ ์ง์คํฐ (PC Register)
- ์ค๋ ๋(Thread)๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ฐ๊ฐ ์์ฑ๋๋ ์์ญ์ผ๋ก ํ์ฌ ์ค๋ ๋๊ฐ ์ด๋ค ๋ช ๋ น์ด๋ก ์คํ๋์ด์ผ ํ ์ง ์ค๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น์ ์ ์ฅํ๊ณ ์๋ ์์ญ
4-5. ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack)
- ์๋ฐ ์ด์ธ์ ์ธ์ด(C, C++ ๋ฑ)๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์คํํ ๋, Native Method Stack์ด ํ ๋น๋๋ฉฐ, ์ผ๋ฐ์ ์ธ C ์คํ์ ์ฌ์ฉ
๋ฐ์ํ
'๐ Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java - Hibernate] ORM, ์์์ฑ, ์์์ฑ ์ปจํ ์คํธ๋ ๋ฌด์์ธ๊ฐ? (0) | 2024.01.22 |
---|---|
[Java] Hibernate๋? (0) | 2024.01.22 |
[Java] Java์ ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2024.01.12 |