JVM ??
JVM (Java Virtual Machine)μ΄λ π ??
JVM (Java Virtual Machine)μ μ§μνλ©΄ μλ°λ₯Ό μ€ννκΈ° μν κ°μ κΈ°κ³(μ»΄ν¨ν°)
μΈλ°, μ½κ² λ§ν΄ OSμ μ’
μλ°μ§ μκ³ μλ° νλ‘κ·Έλ¨ μ€ννκ²½μ λ§λ€μ΄ μ£Όλ μννΈμ¨μ΄ μ΄λ€.
JVMμ μλ° μ€ν νκ²½ JRE (Java Runtime Environment)μ ν¬ν¨λμ΄ μλ€.
Javaλ μ΄λ ν νλ«νΌμ μν₯μ λ°μ§ μλλ€JVMμ μ¬μ©νλ©΄ νλμ λ°μ΄νΈ μ½λ(.class)λ‘ λͺ¨λ νλ«νΌμμ λμνλλ‘ ν μ μλ€.
μλ₯Ό λ€μ΄ CμΈμ΄λ‘ μμ±λ Test.cκ° μλ€λ©΄ μ΄ Test.cλ₯Ό μλμ° μ»΄νμΌλ¬λ₯Ό μ¬μ©ν΄μ μ»΄νμΌνλ©΄ Test.exeκ° λ§λ€μ΄μ§κ³ , μλμ° μ»΄νμΌλ¬λ‘ μ»΄νμΌλμκΈ°μ Test.exeλ μλμ°μμλ§ μ€νλλ μ€ν νμΌμ΄λ€. μ¦ λ¦¬λ μ€ μ΄μ체μ μμλ μ€νν μ μμ΅λλ€. μ¦ C / C++ μμλ μ»΄νμΌ νλ«νΌκ³Ό νκ² νλ«νΌμ΄ λ€λ₯Ό κ²½μ°μλ νλ‘κ·Έλ¨μ΄ λμνμ§ μλλ€. λ§μ½μ΄ Test.ext νμΌμ 리λ μ€ μ΄μ체μ μμ μ€ννλ €λ©΄ 리λ μ€ νκ²½μ νκ²μΌλ‘ ν¬λ‘μ€ μ»΄νμΌμ ν΄μ 리λ μ€ μ΄μ체μ μ λ§λ μ€ν νμΌμ μλ‘ λ§λ€μ΄μΌ νλ€.
Javaμ κ²½μ°μλ Java μΈμ΄λ‘ μμ±λ Test.javaλ μ»΄νμΌνλ©΄ Test.class νμΌμ΄ μμ±λλ€. κ·Έλ¦¬κ³ μ΄λ κ² μμ±λ λ°μ΄νΈ μ½λλ κ°μμ νλ«νΌμ μ€μΉλμ΄ μλ μλ° κ°μ λ¨Έμ (JVM)μ΄ μ΄μ체μ μ λ§λ μ€ν νμΌλ‘ λ°κΏμ€λ€. μ¦ Javaμμλ CμΈμ΄μλ λ¬λ¦¬ JVMμ μ¬μ©νκΈ° λλ¬Έμ κ°μμ νλ«νΌμ λ§κ²λ μ»΄νμΌμ λ°λ‘λ°λ‘ ν΄μ€μΌ ν νμκ° μλ€. νλμ λ°μ΄νΈ μ½λλ‘ JVMμ΄ μ€μΉλμ΄ μλ λͺ¨λ νλ«νΌμμ λμμ΄ κ°λ₯νλ€.
λ°μ΄νΈμ½λ??
JVMμ΄ μ΄ν΄ν μ μλ μΈμ΄λ‘ λ³νλ μλ° μμ€μ½λ
Java μμ€μ½λ, μ¦ μμμ½λ(*.java
)λ CPUκ° μΈμμ νμ§ λͺ»νλ―λ‘ κΈ°κ³μ΄λ‘ μ»΄νμΌμ ν΄μ€μΌνλ€. νμ§λ§ Javaλ μ΄ JVM μ΄λΌλ κ°μλ¨Έμ μ κ±°μ³μ OSμ λλ¬νκΈ° λλ¬Έμ OSκ° μΈμν μ μλ κΈ°κ³μ΄λ‘ λ°λ‘ μ»΄νμΌ λλκ² μλλΌ JVMμ΄ μΈμν μ μλ Java bytecode(*.class
)λ‘ λ³νλλ€. μ¦, CPUκ° μ΄ν΄νλ μΈμ΄λ λ°μ΄λ리 μ½λ, κ°μ λ¨Έμ μ΄ μ΄ν΄νλ μ½λλ λ°μ΄νΈ μ½λ
JVM κ΅¬μ± β¨
1οΈβ£ Class Loader(ν΄λμ€ λ‘λ)
JVM λ΄λ‘ ν΄λμ€νμΌ(.class)λ₯Ό λ‘λνκ³ , λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λμ΄λ€. Runtime μμ μ ν΄λμ€λ₯Ό λ‘λ©νκ² ν΄ μ£Όλ©° ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬μ λ‘λνκ² λλ€.
2οΈβ£ Execution Engine(μ€ν μμ§)
λ‘λλ ν΄λμ€μ λ°μ΄νΈμ½λλ₯Ό μ€ννλ λ°νμ λͺ¨λμ΄ λ°λ‘ μ€ν μμ§μ΄λ€. ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ JVMλ΄μ Runtime Data Areasμ λ°°μΉλ λ°μ΄νΈμ½λλ μ€ν μμ§μ μν΄ μ€νλλ©°, μ€ν μμ§μ μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ€. μ¬κΈ°μ Interpreter(μΈν°ν리ν°) λ°©μκ³Ό JIT compiler λ°©μμ μ¬μ©νκ² λλ€.
3οΈβ£ Interpreter(μΈν°ν리ν°)
μΈν°ν리ν°λ νλ‘κ·Έλλ° μΈμ΄μ μμ€ μ½λλ₯Ό λ°λ‘ μ€ννλ νλ‘κ·Έλ¨μ λ§νλ€. μμ μ½λλ₯Ό κΈ°κ³μ΄λ‘ λ²μνλ μ»΄νμΌλ¬μ λλΉλλ€. μλ°λ μΈν°νλ¦¬ν° λ°©μμ μ¬μ©νμ¬ μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ€. νμ§λ§ ν μ€μ© μννκΈ° λλ¬Έμ μν μλκ° λ리λ€λ λ¨μ μ΄ μλ€.
4οΈβ£ JIT Compiler(Just In Time Compiler)
μΈν°νλ¦¬ν° λ°©μμ λ¨μ μ 보μνκΈ° μν΄ JIT μ»΄νμΌλ¬κ° λμ λμλ€. JIT μ»΄νμΌλ¬λ λ°μ΄νΈμ½λλ₯Ό μ»΄νμΌνμ¬ native code(λ€μ΄ν°λΈ μ½λ)λ‘ λ³ννμ¬ μ¬μ©νλ€. μ¦ ν λ² μ»΄νμΌλ μ½λλ λΉ λ₯΄κ² μννκ² λμ΄ μν μλκ° λΉ λ₯΄κ² λλ€. νμ§λ§ μ»΄νμΌνλ κ³Όμ μ λΉμ©μ΄ λ€κ² λλ€. λ°λΌμ ν λ²λ§ μνν μ½λλΌλ©΄ μ»΄νμΌνμ§ μκ³ μΈν°ν리ν νλ κ²μ΄ μ 리νλ€. λ°λΌμ JVMμ μΈν°νλ¦¬ν° λ°©μμ μ¬μ©νλ€κ° μΌμ ν κΈ°μ€μ΄ λμ΄κ°λ©΄ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νλ νΌν© λ°©μμ μ¬μ©νλ€.
5οΈβ£ Garbage Collector(κ°λΉμ§ μ½λ ν°)
κ°λΉμ§ 컬λ ν°λ μ ν¨νμ§ μμ λ©λͺ¨λ¦¬μΈ κ°λΉμ§(Garbage)λ₯Ό μ 리ν΄μ£Όλ μν μ νλ€. μ¦ Garbage Collection(GC)λ₯Ό λ΄λΉνλ€.
6οΈβ£ Runtime Data Area
Runtime Data Areaλ JVMμ΄ νλ‘κ·Έλ¨μ μννκΈ° μν΄ OSλ‘λΆν° λ³λλ‘ ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°μ λ§νλ€.
1.PC Register
κ° μ°λ λκ° μ΄λ€ λͺ λ Ήμ μ€νν μ§ κΈ°λ‘νλ λΆλΆ
2.JVM Stack
λ©μλ(method)κ° νΈμΆλ λ λ©μλμ λ©μλμ μ 보λ JVM Stackμ μμ΄κ² λλ€. μ¦ λ©μλμ λ§€κ°λ³μ, μ§μ λ³μ, return μ£Όμ, μμ λ³μ λ±μ μ 보λ₯Ό κΈ°λ‘νλ μ€ν, κ° μ€λ λ λ³λ‘ μμ±λκΈ° λλ¬Έμ λ€λ₯Έ μ€λ λλ μ κ·Όν μ μλ€. λ©μλ νΈμΆμ΄ μ’ λ£λλ©΄ μ€νμμ μ 보λ€μ΄ μ κ±°λλ€.
3.Native Method Stack
μλ° μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ€μ μν μ€νμ΄λ€. Java Native Interfaceλ₯Ό ν΅ν΄ νΈμΆλλ C/C++ λ±μ μ½λλ₯Ό μννλ€.
4.Method Area
λͺ¨λ μ°λ λκ° κ³΅μ νλ λ©λͺ¨λ¦¬ μμμΌλ‘ ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ ,Static λ³μ λ±μ λ°μ΄νΈ μ½λλ₯Ό 보κ΄νλ€. Method Areaμλ Runtime Constant Poolμ΄λΌλ λ³λμ κ΄λ¦¬ μμλ μ‘΄μ¬νλ€. μ΄λ μμ μλ£νμ μ μ₯νκ³ μ°Έμ‘°νμ¬ μ€λ³΅μ λ§λ μν μ μννλ€.
5.Heap
Runtime μμ μ λμ μΌλ‘ ν λΉνμ¬ μ¬μ©νλ μμμ΄λ€. ν΄λμ€λ₯Ό μ΄μ©ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ Heapμ μ μ₯λλ€.
λκΈλ¨κΈ°κΈ°