μλ°λ JVM(Java Virtual Machine) λλΆμ OSμ λ 립μ μΈ νΉμ§μ κ°μ§κ³ μλ€. JVMμ μ΄λ ν κΈ°λ₯ λλ¬Έμ OSμ λ 립μ μΌλ‘ μ€νμν¬ μ μλμ§ μλ°μ μ»΄νμΌ κ³Όμ μ ν΅ν΄ μμ보μ.
π 1. μ»΄νμΌ κ³Όμ
μλ°μ μ»΄νμΌ κ³Όμ μ λ€μκ³Ό κ°λ€.
- κ°λ°μκ° μμ±ν μλ° μμ€νμΌ(*. java)μ μλ° μ»΄νμΌλ¬(Java Compiler)κ° λ°μ΄νΈνμΌ(*.class)λ‘ μ»΄νμΌνλ€. (CPUκ° μ΄ν΄ν μ μλ μΈμ΄μΈ λ°μ΄λ리 μ½λκ° μλλΌ JVMμ΄ μ΄ν΄ν μ μλ λ°μ΄νΈ μ½λλ₯Ό κ°μ§ λ°μ΄νΈ νμΌλ‘ λ³ννλ€.)
- ν΄λμ€ λ‘λ(Class Loader)λ₯Ό ν΅ν΄ λ°μ΄νΈ νμΌ(*.class)λ€μ JVMμ μ¬λ¦°λ€.
- JVMμ μλ λ°μ΄νΈ νμΌ(*.class)λ€μ μ€ν μμ§(Execution Engine)μ μΈν°ν리ν°(Interpreter)μ JIT μ»΄νμΌλ¬(JIT Compiler)λ₯Ό ν΅ν΄μ ν΄μλλ€.
- ν΄μλ λ°μ΄νΈ νμΌμ Runtime Data Areasμ λ°°μΉλμ΄ μ€μ§μ μΈ μνμ΄ μ΄λ£¨μ΄μ§λ€.
μ»΄νμΌ κ³Όμ μμ λμ¨ 'μ€ν μμ§ (Execution Engine), λ°νμ λ°μ΄ν° μμ (Runtime Data Area), κ°λΉμ§ 컬λ ν° (Garbage Collector)'μ λν΄μ μμΈν μμ보μ.
π 2. μ€ν μμ§ (Execution Engine)
μ€ν μμ§μ JVM λ©λͺ¨λ¦¬μ μ¬λΌμ¨ λ°μ΄νΈ μ½λλ€μ λͺ λ Ήμ΄ λ¨μλ‘ νλμ© κ°μ Έμμ μ€ννλ€. μ΄λ, μ€ν μμ§μ μΈν°ν리ν°(Interpreter)μ JIT μ»΄νμΌλ¬(JIT Compiler)μ μν΄ λμλλ€.
λ¨Όμ , μΈν°ν리ν°μ μ»΄νμΌλ¬μ λν λλ΅μ μΈ μ°¨μ΄λ₯Ό λ¨Όμ μμ보μ.
μΈν°ν리ν°λ μ»΄νμΌλ¬μ²λΌ κ³ λ 벨μΈμ΄λ₯Ό μ λ 벨μΈμ΄(κΈ°κ³μ΄)λ‘ ν΄μν΄ μ£Όλ λ²μ νλ‘κ·Έλ¨μ΄λ€. μ»΄νμΌλ¬λ μ 체 μμ€μ½λλ₯Ό λ³΄κ³ λͺ λ Ήμ΄λ₯Ό μμ§νκ³ μ¬κ΅¬μ±νλ λ°λ©΄ μΈν°ν리ν°λ μμ€μ½λμ κ° νμ μ°μμ μΌλ‘ λΆμνλ©° μ€νν©λλ€.
κ·Έλμ μΌλ°μ μΌλ‘ κ° νλ§λ€ μ€ννλ μΈν°ν리ν°λ³΄λ€λ μ»΄νμΌλ¬κ° λ λΉ λ¦ λλ€.
JVMμμμ μΈν°ν리ν°(Interpreter)μ JIT μ»΄νμΌλ¬(JIT Compiler)μ λν΄μ μμ보μ.
π 1. μΈν°ν리ν°(Interpreter)
- μΈν°ν리ν°λ λ°μ΄νΈ μ½λ λͺ λ Ήμ΄λ₯Ό νλμ© μ½μ΄μ ν΄μνκ³ μ€ννλ€.
- νλνλμ μ€νμ λΉ λ₯΄λ, μ 체μ μΈ μ€ν μλκ° λ리λ€λ λ¨μ μ΄ μλ€.
π 2. JIT μ»΄νμΌλ¬(JIT Compiler)
- JIT μ»΄νμΌλ¬λ μΈν°ν리ν°μ λ¨μ μ 보μνκΈ° μν΄ λμ λ λ°©μμΌλ‘, λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ°μ΄λ리 μ½λλ‘ λ³κ²½νλ€.
- μ΄νμλ ν΄λΉ λ©μλλ₯Ό λ μ΄μ μΈν°ν리ν νμ§ μκ³ , λ°μ΄λ리 μ½λλ‘ μ§μ μ€ννλ λ°©μμ΄λ€.
- νλμ© μΈν°ν리ν νμ¬ μ€ννλ κ²μ΄ μλλΌ λ°μ΄νΈ μ½λ μ μ²΄κ° μ»΄νμΌλ λ°μ΄λ리 μ½λλ₯Ό μ€ννλ κ²μ΄κΈ° λλ¬Έμ μ 체μ μΈ(μ¬κΈ° λ³Όλ) μ€νμλλ μΈν°ν리ν°λ₯Ό μ΄μ©νλ λ°©μλ³΄λ€ λΉ λ₯΄λ€.
μΈν°ν리ν°λ₯Ό μ΄μ©νμ¬ λ§€λ² μ½λλ₯Ό ν μ€μ© μ½μ΄ λ³ννκ² λλ©΄ μ무λλ 미리 μ»΄νμΌλ μ½λλ₯Ό μννλ κ²λ³΄λ€ λ릴 μλ°μ μλ€. κ·Έλ λ€κ³ , λ°μ΄νΈ μ½λ μ 체λ₯Ό νλ‘κ·Έλ¨ μν μ΄κΈ°μ λͺ¨λ μ»΄νμΌνκ² λλ©΄ μ΄κΈ° μλκ° λ무 λλ¦¬κ² λλ€.
μ΄λ¬ν μ λ€μ κ³ λ €νμ¬, λͺ¨λ μ½λλ μ΄κΈ°μ μΈν°ν리ν°μ μν΄ μμλκ³ , ν΄λΉ μ½λλ₯Ό μΆ©λΆν λ§μ΄ μ¬μ©ν κ²½μ° JIT μ»΄νμΌλ¬μμ μ»΄νμΌμ μννκ² λλ€.
π 3. λ°νμ λ°μ΄ν° μμ (Runtime Data Area)
λ°νμ λ°μ΄ν° μμμ JVMμ λ©λͺ¨λ¦¬ μμμΌλ‘ μλ° μ ν리μΌμ΄μ μ μ€νν λ μ¬μ©λλ λ°μ΄ν°λ€μ μ μ¬νλ μμμ λ§νλ€.
λ°νμ λ°μ΄ν° μμμ ν¬κ²λ 5κ°, μκ²λ 6κ°μ μμμΌλ‘ λλ μ μλ€.
λ©μλ μμ(Method Area)κ³Ό ν μμ(Heap Area)μ λͺ¨λ μ€λ λκ° κ³΅μ ν΄μ μ¬μ©νλ€.
μ€ν μμ(Stack Area), PC λ μ§μ€ν°(PC Register), λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack)μ μ€λ λλ§λ€ νλμ© μμ±λλ€.
π λ©μλ μμ(Method Area)
- λͺ¨λ μ€λ λκ° κ³΅μ νλ μμμΌλ‘ JVMμ΄ μμλ λ μμ±λλ€.
- ν΄λμ€ λ©€λ² λ³μμ μ΄λ¦, λ°μ΄ν° νμ , μ κ·Ό μ μ΄μ μ 보μ κ°μ κ°μ’ νλ μ 보λ€κ³Ό λ©μλ μ 보, λ°μ΄ν° νμ μ 보, Constant Pool, static λ³μ, final class λ±μ΄ μμ±λλ μμμ΄λ€.
π ν μμ(Heap Area)
- μΈμ€ν΄μ€ λλ κ°μ²΄λ₯Ό μ μ₯νλ 곡κ°μΌλ‘ GCμ λμμ΄ λλ€.
- JVM μ±λ₯ λ±μ μ΄μμμ κ°μ₯ λ§μ΄ μΈκΈλλ 곡κ°μ΄λ€.
π μ€ν μμ(Stack Area)
- μ§μλ³μ, νλΌλ―Έν°, λ¦¬ν΄ κ°, μ°μ°μ μ¬μ©λλ μμ κ° λ±μ΄ μμ±λλ μμμ΄λ€.
π PC λ μ§μ€ν°(PC Register)
- μ€λ λκ° μμ±λ λλ§λ€ μμ±λλ μμμΌλ‘ νλ‘κ·Έλ¨ μΉ΄μ΄ν°, μ¦ νμ¬ μ€λ λκ° μ€νλλ λΆλΆμ μ£Όμμ λͺ λ Ήμ μ μ₯νκ³ μλ μμμ΄λ€.
π λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack)
- JAVA μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν μ€νμ΄λ€.
- JNI(JAVA Native Interface)λ₯Ό ν΅ν΄ νΈμΆνλ C/C++ λ±μ μ½λλ₯Ό μννκΈ° μν μ€νμΌλ‘, μΈμ΄μ λ§κ² μ€νμ΄ μμ±λλ€. (Cμ κ²½μ° Cμ€ν, C++μ κ²½μ° C++μ€νμ΄ μμ±λλ€.)
π λ°νμ μμ ν(Runtime Constant Pool)
- JVM λμμμ κ°μ₯ ν΅μ¬μ μΈ μν μ μννλ κ³³μΌλ‘ JVM λͺ μΈμμλ λ°λ‘ μ€μνκ² κΈ°μ νλ€.
- κ° ν΄λμ€μ μΈν°νμ΄μ€μ μμλΏλ§ μλλΌ, λ©μλμ νλμ λν λͺ¨λ λ νΌλ°μ€κΉμ§ λ΄κ³ μλ ν μ΄λΈλ‘ μ΄λ€ λ©μλλ νλλ₯Ό μ°Έμ‘°ν λ JVMμ λ°νμ μμνμ ν΅ν΄ ν΄λΉ λ©μλλ νλμ μ€μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ°Ύμμ μ°Έμ‘°νλ€.
π 4. κ°λΉμ§ 컬λ ν° (Garbage Collector)
μ ν¨νμ§ μμ λ©λͺ¨λ¦¬(= μ£Όμλ₯Ό μμ΄λ²λ €μ μ¬μ©ν μ μλ λ©λͺ¨λ¦¬)λ₯Ό GarbageλΌκ³ νλλ°, Garbage Collectorλ λ©λͺ¨λ¦¬κ° λΆμ‘±ν λ μ΄λ° Garbage λ©λͺ¨λ¦¬λ₯Ό ν΄μ μμΌ λ€λ₯Έ μ©λλ‘ μ¬μ©ν μ μκ² ν΄μ£Όλ νλ‘κ·Έλ¨μ λ§νλ€.
Garbage Collectorλ₯Ό μνν λ Garbage Collectorλ₯Ό μννλ μ€λ λλ₯Ό μ μΈν λͺ¨λ μ€λ λλ€μ΄ μμ μ λ©μΆκ² λλ€. κ·Έλ¦¬κ³ GCμ μμ μ΄ μλ£λλ©΄ λ©μ·λ μ€λ λλ€μ΄ λ€μ μμ μ μμνλ€.
Garbage Collectorμ λν΄μλ μ΄ν κΈμμ μμΈν λ€λ£¨λ κ²μΌλ‘ νμ.
ν΄λΉ κΈμ
ν€λ¬λ λμ 'μκΈ°μ½κ² μ 리ν JAVAμ μ»΄νμΌκ³Όμ λ° JVM λ©λͺ¨λ¦¬ ꡬ쑰, JVM GC',
KoB λμ '[Java] μλ°μ λμκ³Όμ Java Compilerμ JVM',
dalpang.e λμ '[JAVA] JVM λμμ리 λ° κΈ°λ³Έκ°λ ',
minseojo λμ '[Java] μλ° μ»΄νμΌ κ³Όμ & JVM λ΄λΆ ꡬ쑰',
Gyoogle λμ '[Java] μ»΄νμΌ κ³Όμ '
μ μ°Έκ³ νμμ΅λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μΆμν΄λμ€(Abstract Class) VS μΈν°νμ΄μ€(Interface) (1) | 2023.06.13 |
---|---|
μΈν°νμ΄μ€(Interface) (0) | 2023.06.13 |
μΆμ ν΄λμ€(Abstract Class) (2) | 2023.06.11 |
μ λ€λ¦(Generics) - 곡λ³(Covariant), λΆκ³΅λ³(Invariant), λ°κ³΅λ³(Contravariant) (0) | 2023.05.29 |
νλ³ν(μΊμ€ν , Casting) - μ μΊμ€ν (Up-Casting), λ€μ΄μΊμ€ν (Down-Casting) (0) | 2023.05.24 |