-
JVM ๋์๊ณผ์ ๐ป IT Study/Knowledge 2022. 5. 22. 20:27
์๋ฐ์ ๋์๊ณผ์ ๋๋ต์ ์ผ๋ก ์์๋ณด๊ธฐ
1. ๊ฐ๋ฐ์๊ฐ ์๋ฐ ์์ค ์ฝ๋ ์์ฑํ๋ค.
2. Java Compiler๊ฐ ์๋ฐ Source File(*.java)์ ์ปดํ์ผํ์ฌ Byte File(*.class)๋ก ์์ฑํ๋ค.
3. ์ปดํ์ผ๋ Byte File(*.class)์ JVM์ Class Loader์๊ฒ ์ ๋ฌํ๋ค.
4. Class Loader๋ ๋์ ๋ก๋ฉ์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ ๋ฐ ๋งํฌํ์ฌ Run-time Data Area์ ์ ๋ก๋ํ๋ค.
5. Execution Engine์์ JVM ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ Byte ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ํ๋์ฉ ํด์ํ์ฌ Binary Code๋ฅผ ์์ฑํ๋ค.
6. Binary Code๋ Run-time Data Area์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ํ์ด ์ด๋ฃจ์ด์ง๋ค.
Class Loader
JVM์ด ๋์ํ๋ค๊ฐ ๋ฐ์ดํธ ํ์ผ(.class)์ ์ฐธ์กฐํ๋ ์๊ฐ ํด๋์ค๋ก๋๋ ๋์ ์ผ๋ก ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋ฉด์ JVM์ ๋งํฌ๋๋ค.
ํด๋์ค ๋ก๋๋ ํฌ๊ฒ Loading > Linking > Initailization ์ธ ๊ฐ์ง ๋์๊ณผ์ ์ผ๋ก ๋ํ๋ธ๋ค.
Loading
๋ชจ๋ ํด๋์ค๋ค์ด ํ๋์ ํด๋์ค ๋ก๋์ ์ํด ๋ก๋ฉ๋์ง ์๋๋ค.
ํด๋์ค ์ข ๋ฅ์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ด๋ค ํด๋์ค ๋ก๋์ ์ํด ๋ก๋๋ ์ง ๊ฒฐ์ ๋๋ค.
ํด๋์ค๋ก๋๋ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ด๋ค์ ธ ์์ด ์์๋๋ก ์งํ๋๋ค. (why? ๋ชจ๋ํ ๊ธฐ๋ฅ, ํด๋์ค ์ถฉ๋ ํผํจ, ํจ์จ์ ์ฌ์ฉ …)
1. BootStrapClassLoader : jre/lib/rt.jar ํ์ผ์ ๋ก๋ํ๋ค.
2. ExtentionClassLoader : jre/lib/ext ํ์ผ์ ํฌํจ๋ ํด๋์ค ํ์ผ์ ๋ก๋ํ๋ค.
java.ext.dirs ํ๊ฒฝ๋ณ์๋ก ์ง์ ๋ ํด๋์ ์๋ ํด๋์ค ํ์ผ ๋ก๋ฉํ๋ค.
3. ApplicationClassLoader : ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ํจ์ค์์ ํด๋์ค๋ฅผ ์ฝ์ด ๋ก๋ํ๋ค.
๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ์ํด ์ง์ ์์ฑํ ๋๋ถ๋ถ์ ํด๋์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ค ๋ก๋์ ์ํด ๋ก๋ฉ๋๋ค.
Linking
Linkging์ ์ฝ๋ ๋ด๋ถ์ ๋ ํผ๋ฐ์ค๋ค์ ์ฐ๊ฒฐํ๋ค.
1. Verify : ์์ฑ๋ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๊ฐ ์ ์ ํ์ง ๊ฒ์ฆํ๋ค.
2. Prepare : ๋ชจ๋ static ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด์ง๊ณ default ๊ฐ๋ค์ด ํ ๋น๋๋ค.
3. Resolve : ๋ชจ๋ Symblic Memory Reference๊ฐ Run-time Data Area์ Method Area์ ์๋ Original Reference๋ก ๋์ฒด๋๋ค.
Method Area์ Content Pool์ Symblic Reference๋ฅผ Direct Reference๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์์ ์ ํ๋ค.
* Symblic Reference : ์ด๋ฆ์ ๋ํ ์ฐธ์กฐ / Direct Reference : ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ํ ์ฐธ์กฐ
Initializtion
๋ฉ๋ชจ๋ฆฌ ์์ญ์ Static ๋ณ์๋ค์ ์ด๊ธฐํํ๊ณ Original ๊ฐ๋ค๋ก ํ ๋น๋๋ค. ์ด ํ Static Bloak์ด ์คํ๋๋ค.
Execution Engine
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ํด๋์ค๋ค์ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํ์ฌ ๋ช ๋ น์ด ๋จ์๋ก ์คํํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก JVM์ Interpreter ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ์ผ์ ๊ธฐ์ค(?)์ ๋์ด์๋ฉด JIT Compier๋ฐฉ์์ผ๋ก ์คํํ๋ค.
Interpreter
์๋ฐ๊ฐ ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ด๊ณ ์ด์์ฑ์ด ๋์ ๊ฒ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ธํฐํ๋ฆฌํฐ๋ ๋ฐํ์ ์ค ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํ line์ฉ ์ฝ๊ณ ์คํ์ํจ๋ค.
๊ทธ๋ ๊ธฐ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
JIT(Just-In-Time) Compier
Interpreter ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์์ธ๋ ๊ธฐ๋ฅ์ด๋ค.
1. ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ Binary ์ฝ๋๋ก ๋ณ๊ฒฝํ๋ค.
2. ์ดํ ํด๋น ๋ฉ์๋๋ฅผ ๋ ์ด์ Interpretingํ์ง ์๊ณ , Binary ์ฝ๋๋ก ์ง์ ์คํํ๋ค.
GC(Garbage Collector)
์ฐธ์กฐ๋์ด ์์ง ์์ Object๋ค์ ๋ชจ์ผ๊ณ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ค.
Run-time Data Area
JVM ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์์๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด๋ค.
Heap Area
Heap Area์๋ ์ฝ๋ ์คํ์ ์ํ Java๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด ๋ฐ JRE ํด๋์ค๋ค์ด ํ์ฌ๋๋ค.
๋ฌธ์์ด์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง String Pool, ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ ์ธ์คํด์ค, ๋ฐฐ์ด ๋ฑ์ด ์ ์ฅ๋๋ค.
JVM๋น ํ๋๋ง ์์ฑ๋์ด ํด๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ๊ณต์ ๋๋ค.
Heap ์์ญ์ด ๊ฐ์ง๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ Java Stack ์์ญ์ ์ฐธ์กฐ๋์ด Thread๊ฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
Heap ์์ญ์ด ๊ฐ๋์ฐฐ ๊ฒฝ์ฐ, OutofMemoryError๋ฅผ ๋ฐ์์ํจ๋ค.
Heap์์๋ ์ฐธ์กฐ๋์ง ์์ ์ธ์คํด์ค์ ๋ฐฐ์ด์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ด์ GC์ ์ฃผ ๋์์ด๋๋ค.
Method Area
Method Area์๋ static ๋ณ์๋ฅผ ํฌํจํ ํด๋์ค ์์ค์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
JVM๋ง๋ค ์ค์ง ํ๋์ Method Area๊ฐ ์๊ณ , ๋ฆฌ์์ค๊ฐ ๊ณต์ ๋๋ค.
๋ฐํ์ ์ค ํด๋์ค ์ฌ์ฉ ์ Class Loader๊ฐ ํด๋น ํด๋์ค์ .class ํ์ผ์ ์ฝ์ด ๋ถ์ํ๋ค.
์ด ๋ ์ ํจํ๋ค๋ฉด ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, ๋ฉ์๋ ์ฝ๋๋ค์ Method Area ์ ์ ์ฅํ๋ค.
ํด๋์ค ๋ณ์๋ ์ด ์์ญ์ ํจ๊ป ์์ฑ๋๋ค.
๊ฐ์ฒด ์์ฑ ํ ๋ฉ์๋ ์คํ ์ ํด๋น ํด๋์ค ๋ฉํ๋ฐ์ดํฐ๋ฅผ Method Area์ ์ ์ฅํ๊ฒ ๋๋ค.
JVM Stacks
JVM Stack์ Thread์ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๋ Frame์ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
๊ฐ๊ฐ์ Thread๋ฅผ ์ํด ๋ถ๋ฆฌ๋ Runtime Stack์ด ์์ฑ๋๋ค.
JVM์ JVM Stack์ StackFrame์ push, popํ๋ ์์ ๋ง ์ํํ๋ค.
1. Method๋ฅผ ์ํํ ๋๋ง๋ค JVM์ Stack Frame์ ํ๋์ฉ ์์ฑํ์ฌ Stack์ Push ํ๋ค.
2. ์ด ๋ ์๋ก ๋ค์ด๊ฐ StackFrame์ด Current Frame์ด ๋๋ค.
3. Method๊ฐ ์ํ์ข ๋ฃ ์ pop๋์ด ์ด์ StackFrame์ด Current Frame์ด ๋๋ค.Stack Frame : Thread๊ฐ ์ํํ๊ณ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฉ์๋ ๋จ์๋ก ๊ธฐ๋กํ๋ ๊ณณ
PC(Program Counter) Regiter
Java์์ Thread๋ ๊ฐ์์ ๋ฉ์๋๋ฅผ ์คํํ๋ค.
์ด ๋ Thread๋ณ๋ก ๋์์ ์คํํ๋ ํ๊ฒฝ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ์ํด์๋ JVM์์ ๋ช ๋ น์ด ์ฃผ์๊ฐ์ ์ ์ฅํ ๊ณต๊ฐ์ด ํ์ํ๋ค.
์ด ์ ์ฅ ๊ณต๊ฐ์ PC Regiter ์์ญ์ด ๊ด๋ฆฌํ์ฌ ์ถ์ ๋๋๋ก ํ๋ค.
Thread ๊ฐ ์์ํ ๋๋ง๋ค PC Register๊ฐ ํ๋์ฉ ์์ฑ๋๋ค.
PC Register์๋ Native Pointer์ Return Address๋ฅผ ๊ฐ์ง๋ค.
Thread์์ ์คํํ๋ ๋ฉ์๋๊ฐ Native ํ๋ค๋ฉด Undefined๊ฐ ๊ธฐ๋ก๋๊ณ ,
๊ทธ๋ ์ง ์๋ค๋ฉด JVM์์ ์ฌ์ฉ๋ ๋ช ๋ น์ ์ฃผ์๊ฐ์ ์ ์ฅํ๊ฒ ๋๋ค.
Native Method Stacks
Native Method Stack์ Java๋ก ์์ฑ๋์ง ์์ ๋ฉ์๋๋ฅผ ๋ค๋ฃจ๋ ์์ญ์ด๋ค.
Java๋ Java์ธ์ ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ, API ํดํท๋ฑ๊ณผ์ ํตํฉ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด JNL(Java Native Interface) ๋ผ๋ ํ์ค๊ท์ ์ ์ ๊ณตํ๋ค. ์ฆ, Native Code๋ก ๋์ด์๋ ํจ์์ ํธ์ถ์ Java ํ๋ก๊ทธ๋จ ์์์ ์ํํ๊ฑฐ๋ ๋ฆฌํด๊ฐ์ ๋ฐ์ ์ฌ ์ ์๋ค.
Java Stack ์์์ Native Method๋ฅผ ๋ง๋ ์ํํ๋ค๋ฉด ์๋ ๊ณผ์ ๋๋ก ์งํ๋๋ค.
- Native Method Stack์ Native Function์ ๋ง๋ค์ด ํธ์ถํ๋ค.
- Native Function์ด ๋๋๋ฉด, JVM Stack์ผ๋ก ๋ค์ ๋์์จ๋ค. ์ด ๋, ํธ์ถํ Stack Frame์ด ์๋ ์๋ก์ด Stack Frame์ ํ๋ ๋ ์์ฑํ์ฌ ์์ ์ ์ํํ๋ค.
์ต์ ๋ฒ์ JVM์ JVM Stack๊ณผ Native Method Stack ๋ ์์ญ์ ๋๋์ด ์ฐ์ง ์๊ณ ํตํฉํ์ฌ ์ด๋ค. ๋ค๋ง Java Method์ธ์ง Native Method์ธ์ง์ ๋ฐ๋ผ StackFunction์ธ์ง Native Stack Frame์ธ์ง๋ฅผ ๊ตฌ๋ถํ๋ค.
โป ์ฐธ์กฐ๋ธ๋ก๊ทธ
'๐ป IT Study > Knowledge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋คํธ์ํฌ] DMZ(DeMilitarized Zone) (0) 2022.05.24 [์ฉ์ด์ ๋ฆฌ] SSH(Secure Shell) (0) 2022.05.23 ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ๋ชจ์zip (0) 2022.04.20 [์ฉ์ด์ ๋ฆฌ] ์ธ์ด ๋ฐ ์ฝ๋ (0) 2022.04.12 [์ฉ์ด์ ๋ฆฌ] ์ปดํ์ผ(Compile), ๋งํฌ(Link), ๋น๋(Build) (0) 2022.04.10