JVM ꡬλλ°©μ
(0) μ»΄νμΌλ¬μ .java -> .class μ»΄νμΌ
β(1) ν΄λμ€ λ‘λμ μν΄μ ν΄λμ€ νμΌμ λ©λͺ¨λ¦¬ μμμ λ‘λ ν μ΄κΈ°ν μμ μν
β(2) λ©λͺ¨λ¦¬ μμμ Static(Method)λΆν° λ‘λκ° λ©λλ€
( ν΄λμ€ λ‘λκ° λλ ν JVMμ main λ©μλλ₯Ό μ°Ύμ μ§μλ³μ, κ°μ²΄λ³μ, μ°Έμ‘°λ³μλ₯Ό μ€νμ μμ )
(4) λ‘λ νμ JVMμ΄ ν μμμ κ°μ²΄λ₯Ό μμ±ν©λλ€
(5) λ§μ§λ§μΌλ‘ μ€νμμ§μ΄ .class νμΌ(λ°μ΄νΈμ½λ)μ λ€μν λ©λͺ¨λ¦¬λ₯Ό μ°Έμ‘°νμ¬ νμ€μ© μν©μ λ§λ μμ μν(ν¨μ νΈμΆ, κ°μ²΄ ν λΉ λ±)
- Class Loader: JVMλ΄λ‘ ν΄λμ€λ₯Ό λ‘λνκ³ λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λλ‘μ¨ λ°νμμ λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λνλ€.
- Execution Engine: Class Loaderλ₯Ό ν΅ν΄ JVM λ΄μ λ°νμ λ°μ΄ν° μμμ λ°°μΉλ λ°μ΄νΈ μ½λλ₯Ό μ€ννλ€. μ΄ λ, Execution Engineμ μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ€.
- Garbage Collector: JVMμ Garbage Collectorλ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ₯μ μλμΌλ‘ μννλ€. μ ν리μΌμ΄μ μ΄ μμ±ν κ°μ²΄μ μμ‘΄ μ¬λΆλ₯Ό νλ¨νμ¬ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό ν΄μ νλ λ°©μμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό μλ κ΄λ¦¬νλ€.
- Runtime Data Areas: JVMμ΄ μ΄μ체μ μμμ μ€νλλ©΄μ ν λΉλ°λ λ©λͺ¨λ¦¬ μμμ΄λ€. Class Loaderμμ μ€λΉν λ°μ΄ν°λ€μ 보κ΄νλ μ μ₯μμ΄λ€.
Runtime Data Areas
Runtime Data Areasλ Processλ‘μμ JVM νλ‘κ·Έλ¨μ μννκΈ° μν΄
OSλ‘ λΆν° ν λΉ λ°λ λ©λͺ¨λ¦¬ μμμΌλ‘
κ°κ°μ λͺ©μ μ λ°λΌ 5κ°μ μμμΌλ‘ λλλ€.
JVM λ©λͺ¨λ¦¬κ΅¬μ‘°
1. λ©μλμμ : λ©μλμ λ°μ΄νΈμ½λ , ν΄λμ€λ³μκ° μ μ₯λλ μμ
2. ν μμ : νλ‘κ·Έλ¨ μ€ν μ€ μμ±λ κ°μ²΄κ° μ μ₯λλ μμ
3. μ€ν μμ : λ©μλ λ΄μ μ§μλ³μ , 맀κ°λ³μ(μ°Έμ‘°ν μ μΈ)κ° μ μ₯λλ μμ
4. pc λ μ§μ€ν° : jvmμ΄ νμ¬ μνν λͺ λ Ήμ΄μ μ£Όμκ° μ μ₯λλ μμ
5. Nativeλ©μλ μ€ν : JAVAμ΄ μΈμ λ€λ₯Έ μΈμ΄μ λ©μλμ 맀κ°λ³μ , μ§μλ³μκ° μ μ₯λλ μμ
λ©μλ μμ/λ°νμ μμ νμ μ¬μ©κΈ°κ° λ° μ€λ λ 곡μ λ²μ
- JVM μμμ μμ±
- νλ‘κ·Έλ¨ μ’ λ£ μκΉμ§
- λͺ μμ μΌλ‘ null μ μΈ μ
- κ΅¬μ± λ°©μμ΄λ GC λ°©λ²μ JVM λ²€λλ§λ€ λ€λ₯Ό μ μλ€.
- λͺ¨λ μ€λ λμμ 곡μ νλ€.
Method (Static) Area
- Methodμμ, μ μ μμμ΄λΌκ³ ν©λλ€.
- JVMμ΄ μ½μ΄λ€μΈ ν΄λμ€μ μΈν°νμ΄μ€ λν λ°νμ μμ ν, λ©€λ² λ³μ(νλ), ν΄λμ€ λ³μ(Static λ³μ), μμ±μμ λ©μλλ₯Ό μ μ₯νλ 곡κ°μ΄λ€.
- μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ μ¬μ©ν μ μμ΅λλ€.
- 미리 λ‘λλμ΄ μκΈ°μ νΈμΆμμ μκ°μ΄ μ κ² κ±Έλ¦½λλ€.
- ν λΉλ°λ λ©λͺ¨λ¦¬κ° νμ λμ΄ μμΌλ©° λ°λ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° λμ§ μκΈ° λλ¬Έμβ λ¨λ°ν΄μ μ¬μ©ν΄μ μλ©λλ€.
λ°λΌμ, staticμ μ¬μ©ν΄μΌ νλ μ΄μ κ° μμ΄μΌ ν©λλ€.
Runtime Constant Pool
- λ©μλ μμμ ν¬ν¨λμ§λ§ λ μμ μ€μμ±μ΄ μλ€.
- ν΄λμ€ νμΌ constant_pool ν μ΄λΈμ ν΄λΉνλ μμμ΄λ€.
- ν΄λμ€μ μΈν°νμ΄μ€ μμ, λ©μλμ νλμ λν λͺ¨λ λ νΌλ°μ€λ₯Ό μ μ₯νλ€.
- JVMμ λ°νμ μμ νμ ν΅ν΄ ν΄λΉ λ©μλλ νλμ μ€μ λ©λͺ¨λ¦¬ μ μ£Όμλ₯Ό μ°Ύμ μ°Έμ‘°νλ€
Heap μμ
- newλ₯Ό ν΅ν΄ μμ±ν κ°μ²΄μ μ 보 (μ°Έμ‘°κ° : Reference Type)μ΄ λ΄κΉλλ€.
- JVMμ΄ κ΄λ¦¬νλ νλ‘κ·Έλ¨ μμμ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ λ°νμ μ λμ μΌλ‘ ν λΉνμ¬ μ¬μ©νλ μμμ΄λ€.
- μ€λ λκ° κ³΅μ νλ μμμ λλ€.
- κ°λΉμ§ 컬λ ν°μ μν΄μ λ©λͺ¨λ¦¬κ° κ΄λ¦¬λ©λλ€.
- ν μμμ μμ±λ κ°μ²΄μ λ°°μ΄μ μ€ν μμμ λ³μλ λ€λ₯Έ κ°μ²΄μ νλμμ μ°Έμ‘°νλ€.
- μ°Έμ‘°νλ λ³μλ νλκ° μλ€λ©΄ μλ―Έ μλ κ°μ²΄κ° λμ΄ GCμ λμμ΄ λλ€.
- ν μμμ μ¬μ©κΈ°κ° λ° μ€λ λ 곡μ λ²μ
- κ°μ²΄κ° λ μ΄μ μ¬μ©λμ§ μκ±°λ λͺ μμ μΌλ‘ null μ μΈ μ
- GC(Garbage Collection) λμ
- κ΅¬μ± λ°©μμ΄λ GC λ°©λ²μ JVM λ²€λλ§λ€ λ€λ₯Ό μ μλ€.
- λͺ¨λ μ€λ λμμ 곡μ νλ€.
Stack μμ
- κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬νλ©°, μ€λ λκ° μμλ λ ν λΉλλ€.
- λ©μλλ₯Ό νΈμΆν λλ§λ€ νλ μ(Frame)μ μΆκ°(push)νκ³ λ©μλκ° μ’ λ£λλ©΄ ν΄λΉ νλ μμ μ κ±°(pop)νλ λμμ μννλ€.
- λ©μλ μ 보, μ§μλ³μ, 맀κ°λ³μ, μ°μ° μ€ λ°μνλ μμ λ°μ΄ν° μ μ₯
- μ€λ λκ° κ³΅μ νλ μμμ λλ€.
- λͺ¨λ λμμ΄ μλ£λλ©΄ λ©λͺ¨λ¦¬μμ μ¬λΌμ§λλ€.
- κΈ°λ³Έ(μμ)νμ λ³μ(int, long, float λ±)λ μ€ν μμμ μ§μ κ°μ κ°μ§λ€.
- μ°Έμ‘°νμ λ³μλ ν μμμ΄λ λ©μλ μμμ κ°μ²΄ μ£Όμλ₯Ό κ°μ§λ€.
β
βPC Register
- νμ¬ μν μ€μΈ JVM λͺ λ Ή μ£Όμλ₯Ό κ°λλ€.
- νλ‘κ·Έλ¨ μ€νμ CPUμμ μΈμ€νΈλμ (Instruction)μ μν.
- CPUλ μΈμ€νΈλμ μ μννλ λμ νμν μ 보λ₯Ό CPU λ΄ κΈ°μ΅μ₯μΉμΈ λ μ§μ€ν°μ μ μ₯νλ€.
- μ°μ° κ²°κ³½κ°μ λ©λͺ¨λ¦¬μ μ λ¬νκΈ° μ μ μ₯νλ CPU λ΄μ κΈ°μ΅μ₯μΉ
Native Method Stack Area
- μλ° μΈ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν Stackμ΄λ€.
- μ¦, JNI(Java Native Interface)λ₯Ό ν΅ν΄ νΈμΆλλ C/C++ λ±μ μ½λλ₯Ό μννκΈ° μν μ€νμ΄λ€.
- λ€μ΄ν°λΈ λ©μλμ 맀κ°λ³μ, μ§μλ³μ λ±μ λ°μ΄νΈ μ½λλ‘ μ μ₯νλ€.
μΆμ² :
μλ°JAVA(6) μλ° λ©λͺ¨λ¦¬ ꡬ쑰(feat. JVMꡬλλ°©μ) - https://hoonmaro.tistory.com
λ§λ‘μ Java(μλ°) μ 리 - 8. μλ° λ©λͺ¨λ¦¬ ꡬ쑰 - https://blog.naver.com/chlwlstjd10