μλ°λ OSμ λ 립μ μΈ νΉμ§μ κ°μ§κ³ μλ€.
JVMμ΄ OSμ νλ‘κ·Έλ¨μ μ¬μ΄μμ κΈ°κ³μ΄λ‘ νμμ»μ£Όλ μν μ νκΈ° λλ¬Έμ΄λ€.
JVM JAVA Virtual Machine
μ»΄νμΌλ λ°μ΄νΈ μ½λλ₯Ό κΈ°κ³κ° μ΄ν΄ν μ μλ κΈ°κ³μ΄λ‘ λ³ν
μ€νκΈ°λ°μ κ°μ λ¨Έμ
λ©λͺ¨λ¦¬ κ΄λ¦¬μ GCλ₯Ό μν
μλ° μ½λμ μ€ν κ³Όμ
1. κ°λ°μκ° μλ°μ½λλ₯Ό μμ±νλ€.
2. ( .java ) μΈ νμΌμ μλ° μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μλ° λ°μ΄νΈ μ½λλ‘ μ»΄νμΌνλ€.
3. μ»΄νμΌ λ λ°μ΄νΈ μ½λλ₯Ό JVMμ Class Loaderμ μ λ¬νλ€.
4. Class Loaderλ λμ λ‘λ©μ ν΅ν΄ νμ ν΄λμ€λ€μ λ‘λ© λ° λ§ν¬νμ¬ Runtime Data Areaμ μ¬λ¦°λ€. (JVMμ λ©λͺ¨λ¦¬)
5. μ€ν μμ§μ JVMλ©λͺ¨λ¦¬μ μ¬λΌμ¨ λ°μ΄νΈ μ½λλ€μ λͺ λ Ήμ΄ λ¨μλ‘ νλμ© κ°μ Έμμ μ€ννλ€.
JVM
Class Loader + Runtime Data Areas + Execution Engine
Class Loader νΉμ§
1. κ³μΈ΅ ꡬ쑰
ν΄λμ€ λ‘λλ μ¬λ¬ ν΄λμ€ λ‘λλΌλ¦¬ λΆλͺ¨-μμ κ΄κ³λ₯Ό μ΄λ£¨μ΄ κ³μΈ΅μ μΈ κ΅¬μ‘°λ‘ λμ΄ μλ€.
- λΆνΈμ€νΈλ© ν΄λμ€ λ‘λ Bootstrap Class Loader
- μ΅μμ ν΄λμ€λ‘λ, μ μΌνκ² JAVAκ° μλ λ€μ΄ν°λΈ μ½λλ‘ κ΅¬ν
- JVMμ΄ μ€νλ λ κ°μ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ°
- Object ν΄λμ€λ₯Ό λΉλ‘―νμ¬ JAVA APIλ€μ λ‘λν¨
- μ΅μ€ν
μ
ν΄λμ€ λ‘λ Extension Class Loader
- κΈ°λ³Έ JAVA APIλ₯Ό μ μΈν νμ₯ ν΄λμ€λ€μ λ‘λν¨ - λ€μν 보μ νμ₯ κΈ°λ₯ λ‘λ
- μμ€ν
ν΄λμ€ λ‘λ System Class Loader
- (λΆνΈ μ€νΈλ©κ³Ό μ΅μ€ν μ ν΄λμ€λ‘λκ° JVM μ체μ κ΅¬μ± μμλ€μ λ‘λνλ€) μμ€ν ν΄λμ€ λ‘λλ μ΄ν리μΌμ΄μ μ ν΄λμ€λ€μ λ‘λν¨
- μ¬μ©μκ° μ§μ ν $CLASSPATH λ΄μ ν΄λμ€λ€μ λ‘λν¨
- μ¬μ©μ μ μ ν΄λμ€ λ‘λ User-Defined Class Loader
- μ΄ν리μΌμ΄μ μ¬μ©μκ° μ§μ μ½λ μμμ μμ±νμ¬ μ¬μ©νλ ν΄λμ€ λ‘λ
- WASμ κ°μ νλ μμν¬λ μλ‘ λ 립μ μΌλ‘ λμνκ² νκΈ° μν΄μ μ΄λ₯Ό μν΄ μ¬μ©μ μ μ ν΄λμ€ λ‘λλ€μ μ¬μ©νμ¬ ν΄λμ€ λ‘λμ μμ λͺ¨λΈμ ν΅ν΄ μ΄ν리μΌμ΄μ μ λ 립μ±μ 보μ₯ν¨
2. μμλͺ¨λΈ
μ²μ λ°μ΄νΈ μ½λλ₯Ό λ겨λ°μ ν΄λμ€λ‘λ.
νμν ν΄λμ€λ₯Ό λ‘λν λ νΉμ μ€ν μμ§μμ λͺ λ Ήμ΄ λ¨μλ‘ λ°μ΄νΈ μ½λλ₯Ό μ€ννλ€κ° μ²μμΌλ‘ μ°Έμ‘°νλ ν΄λμ€μ λν΄ ν΄λμ€ λ‘λμκ² λ‘λλ₯Ό μμ²ν λ.
λ‘λλ₯Ό μμ²λ°μ ν΄λμ€ λ‘λλ λ€μ μμλλ‘ μμ²λ°μ ν΄λμ€κ° μλμ§ νμΈν¨
- ν΄λμ€ λ‘λ μΊμ
- μμ ν΄λμ€ λ‘λ
- μκΈ° μμ
μ΄μ μ λ‘λλ ν΄λμ€μΈμ§ ν΄λμ€ λ‘λ μΊμλ₯Ό νμΈνλ€.
μλ€λ©΄ μμ ν΄λμ€ λ‘λλ₯Ό νλμ© κ±°μ¬λ¬ μ¬λΌκ°λ©° νμΈνλλ°, μ΄ λ μ¬λΌκ°λ λμ€μ ν΄λμ€λ₯Ό λ°κ²¬νλλΌλ λΆνΈ μ€νΈλ© ν΄λμ€ λ‘λ(μ΅μλ¨ λ‘λ)κΉμ§ νμΈμ ν΄μ λΆνΈ μ€νΈλ© ν΄λμ€ λ‘λμλ ν΄λΉ ν΄λμ€κ° μ‘΄μ¬νλ€λ©΄ κ·Έ ν΄λμ€λ₯Ό λ‘λνκ² λλ€.
3. κ°μμ± μ ν
ν΄λμ€ λ‘λκ° ν΄λμ€ λ‘λλ₯Ό μμ²λ°μμ λ μμ λͺ¨λΈμ μν΄μ ν΄λμ€ λ‘λ μΊμλ₯Ό νμΈνκ³ μμΌλ©΄ μμ ν΄λμ€ λ‘λλ₯Ό νμΈνλ€. μ΄λ νμ ν΄λμ€λ νμΈμ΄ λΆκ°λ₯ν νΉμ±μ΄ λ°λ‘ κ°μμ± μ νμ΄λ€.
4. μΈλ‘λ λΆκ°
ν΄λμ€λ₯Ό λ‘λνλ κ²μ κ°λ₯νμ§λ§ κ·Έ λ°λλ‘ unloadνλ κ²μ λΆκ°λ₯νλ€.
5. μ΄λ¦ 곡κ°
λ€μ μ€νμ΄μ€λ κ° ν΄λμ€ λ‘λλ€μ΄ κ°μ§κ³ μλ 곡κ°μΌλ‘ λ‘λλ ν΄λμ€λ₯Ό 보κ΄νλ 곡κ°
μμ λͺ¨λΈμ ν΅ν΄μ μμ ν΄λμ€ λ‘λλ€μ νμΈν΄μΌν λ νμΈνλ 곡κ°μ΄ λ°λ‘ μ΄λ¦ 곡κ°
λ€μ μ€νμ΄μ€μ 보κ΄λλ κΈ°μ€μ FQCN Fully Qualified Class Name μΌλ‘ ν¨ν€μ§ λͺ κΉμ§ ν¬ν¨λμ΄μλ μλ³μλ₯Ό λ»νλ€.
κ°κ°μ ν΄λμ€ λ‘λκ° κ°μ λ€μ μ€νμ΄μ€λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ FQCNμ΄ κ°μ ν΄λμ€λΌλ λ€μμ€νμ΄μ€κ° λ€λ₯΄λ©΄ λ€λ₯Έ ν΄λμ€λ‘ κ°μ£Όνλ€. ( μ΄ κΈ°λ₯μ ν΅ν΄ λ‘λν ν΄λμ€ λ‘λλ₯Ό μ κ±°νκ³ μΈλ‘λμ ν¨κ³Όλ₯Ό μ€ μ μλ€. )
ν΄λμ€ λ‘λ κ³Όμ
1. λ‘λ - ν΄λμ€ νμΌμ κ°μ Έμμ JVMμ λ©λͺ¨λ¦¬μ λ‘λνλ€.
2. κ²μ¦ - ν΄λμ€ λ‘λ μ κ³Όμ μ€μμ κ°μ₯ 볡μ‘νκ³ μκ°μ΄ λ§μ΄ 걸리λ κ³Όμ μΌλ‘, μ½μ΄λ€μΈ ν΄λμ€κ° μλ° μΈμ΄ λͺ μΈ λ° JVM λͺ μΈμ λͺ μλ λλ‘ κ΅¬μ±λμ΄ μλμ§ κ²μ¬νλ€.
3. μ€λΉ - ν΄λμ€κ° νμλ‘ νλ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ€.
4. λΆμ - ν΄λμ€μ μμ ν λ΄ λͺ¨λ μ¬λ³Όλ¦ λ νΌλ°μ€λ₯Ό λ€μ΄λ νΈ λ νΌλ°μ€λ‘ λ³κ²½νλ€.
5. μ΄κΈ°ν - ν΄λμ€ λ³μλ€μ μ μ ν κ°μΌλ‘ μ΄κΈ°ννλ€. (static νλλ€μ μ€μ λ κ°μΌλ‘ μ΄κΈ°ν )
λ°νμ λ°μ΄ν° μμ Runtime Data Area
JVMμ΄ OS μμμ μ€νλλ©΄μ ν λΉλ°λ λ©λͺ¨λ¦¬ μμμ΄ λ°λ‘ λ°νμ λ°μ΄ν° μμμ΄λ€.
μ΄ μμμ ν¬κ² 5κ°μ§, μΈλΆνμ 6κ°μ§λ‘ λλ λ³Ό μ μλ€.
PC λ μ§μ€ν°, JVM μ€ν, λ€μ΄ν°λΈ λ©μλ μ€νμ μ€λ λλ§λ€ νλμ© μμ±λκ³
ν, λ©μλ μμμ λͺ¨λ μ€λ λκ° κ³΅μ ν΄μ μ¬μ©λλ€.
- PC λ μ§μ€ν°
- Program Counter λ μ§μ€ν°λ νμ¬ μν μ€μΈ λͺ λ Ήμ μ£Όμλ₯Ό κ°μ§λ©° μ€λ λκ° μμλ λ μμ±λλ©°, κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬ν¨
- JVM μ€ν
- μ€ν νλ μμ΄λΌλ ꡬ쑰체λ₯Ό μ μ₯νλ μ€ν
- μμΈ λ°μ μ printStackTrace( ) λ©μλλ‘ λ³΄μ¬μ£Όλ Stack Traceμ κ° λΌμΈ νλκ° μ€ν νλ μμ ννν¨
- μ€λ λκ° μμλ λ μμ±λλ©° κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬ν¨
- λ€μ΄ν°λΈ λ©μλ μ€ν
- μλ° μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν μ€ν
- JAVA Native Interfaceλ₯Ό ν΅ν΄ νΈμΆνλ C/C++ λ±μ μ½λλ₯Ό μννκΈ° μν μ€νμΌλ‘, μΈμ΄μ λ§κ² μ€ν μμ±
- ν
- μΈμ€ν΄μ€ λλ κ°μ²΄λ₯Ό μ μ₯νλ 곡κ°
- Garbage Collectionμ λμ
- JVM μ±λ₯ λ±μ μ΄μμμ κ°μ₯ λ§μ΄ μΈκΈλλ 곡κ°
- ν κ΅¬μ± λ°©μμ΄λ κ°λΉμ§ 컬λ μ λ°©λ² λ±μ JVM λ²€λλ€μ μ¬λ
- λ©μλ μμ
- λͺ¨λ μ€λ λκ° κ³΅μ νλ μμ
- JVMμ΄ μμλ λ μμ±λλ€.
- JVMμ΄ μ½μ΄ λ€μΈ κ°κ°μ ν΄λμ€μ μΈν°νμ΄μ€μ λν λ°νμ μμ ν, νλμ λ©μλμ λν μ 보, static λ³μ, λ©μλμ λ°μ΄νΈ μ½λλ€μ 보κ΄ν¨
- λ°νμ μμ ν
- JVM λμμμ κ°μ₯ ν΅μ¬μ μΈ μν μ μννλ κ³³
- κ° ν΄λμ€μ μΈν°νμ΄μ€μ μμ λΏλ§ μλλΌ, λ©μλμ νλμ λν λͺ¨λ λ νΌλ°μ€κΉμ§ λ΄κ³ μλ ν μ΄λΈ
- μ΄λ€ λ©μλλ νλλ₯Ό μ°Έμ‘°ν λ JVMμ λ°νμ μμ νμ ν΅ν΄ ν΄λΉ λ©μλλ νλμ μ€μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ°Ύμμ μ°Έμ‘°νλ€.
μ€ν μμ§ Execution Engine
μ€ν μμ§μ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ°νμ λ°μ΄ν° μμμ λ°°μΉλ λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ν
λ°μ΄νΈ μ½λμ κ° λͺ λ Ήμ΄λ 1λ°μ΄νΈ ν¬κΈ°μ OpCodeμ μΆκ° νΌμ°μ°μλ‘ μ΄λ€μ Έμμ
μ€ν μμ§μ νλμ OpCodeλ₯Ό κ°μ Έμμ νΌμ°μ°μμ μμ μ μνν λ€μ OpCodeλ₯Ό μννλ μμΌλ‘ λμνλ€.
μ΄ μν κ³Όμ μμ μ€ν μμ§μ λ°μ΄νΈ μ½λλ₯Ό κΈ°κ³κ° μ€νν μ μλ ννλ‘ λ³κ²½νλλ° λκ°μ§ λ°©λ²μ μ¬μ©νλ€.
- μΈν°ν리ν°
- λ°μ΄νΈ μ½λ λͺ λ Ήμ΄λ₯Ό νλμ© μ½μ΄μ ν΄μνκ³ μ€ννλ€. νλνλμ ν΄μμ λΉ λ₯΄μ§λ§ μ 체μ μΈ μ€ν μλλ λ리λ€λ λ¨μ μ κ°μ§λ€.
- JVM μμμ λ°μ΄νΈ μ½λλ κΈ°λ³Έμ μΌλ‘ μΈν°νλ¦¬ν° λ°©μμΌλ‘ λμνλ€.
- JIT μ»΄νμΌλ¬ Just-In-Time
- μΈν°ν리ν°μ λ¨μ μ 보μνκΈ° μν΄ λμ λ λ°©μ
- λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λλ‘ λ³κ²½νκ³ , μ΄νμλ ν΄λΉ λ©μλλ₯Ό λμ΄μ μΈν°ν리ν νμ§ μκ³ λ€μ΄ν°λΈ μ½λλ‘ μ§μ μ€ννλ λ°©μ
- μ 체μ μΈ μ€ν μλλ μΈν°ν리ν λ°©μλ³΄λ€ λΉ λ₯΄λ€ ( λ€μ΄ν°λΈ μ½λλ μΊμμ 보κ΄νκΈ° λλ¬Έμ ν λ² μ»΄νμΌλ μ½λλ μΊμμμ λ°λ‘ κΊΌλ΄μ΄ μ€νν΄ λΉ λ₯΄κ² μνλλ€ )
- νμ§λ§ JIT μ»΄νμΌλ¬κ° μ»΄νμΌνλ κ³Όμ μ λ°μ΄νΈ μ½λλ₯Ό νλμ© μΈν°ν리ν νλ κ²λ³΄λ€ ν¨μ¬ μ€λ 걸리기 λλ¬Έμ JVMμ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό νΈμΆλκ³ μ€νλλ μ§λ₯Ό 체ν¬νκ³ , μΌμ κΈ°μ€μ λμμ λλ§ JIT μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μ»΄νμΌ νμ¬ λ€μ΄ν°λΈ μ½λλ₯Ό μμ±νλ€.
μ°Έμ‘°
'π₯ > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA] κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ΄λ? (0) | 2021.08.11 |
---|---|
[JAVA] μλ°κ°μλ¨Έμ , JVMμ΄λ? (0) | 2021.08.11 |
[JAVA] HashMapκ³Ό HashTableμ μ°¨μ΄μ (0) | 2021.08.04 |
[JAVA] Hashλ? (0) | 2021.08.04 |