[Java] JVM(Java Virtual Machine)μ ꡬ쑰μ λμλ°©μμ λν΄
by rlaehddnd0422Javaλ μ»΄νμΌ λ°©μκ³Ό, μΈν°νλ¦¬ν° λ°©μμ μ₯μ μ κ²°ν©ν νμ΄λΈλ¦¬λ μΈμ΄μ λλ€.
νμ΄λΈλ¦¬λ λ°©μμμλ μμ±λ μμμ½λλ₯Ό μ΄μ§νμΌλ‘ μ»΄νμΌνλ κ³Όμ κ³Ό, μ€μ ν΄λΉ μ½λκ° μ€νλλ μμ (Runtime)μμ JVMμμ μ΄ μ΄μ§νμΌμμ νμν λΆλΆλ€μ ν μ€μ© μ½μ΄(interprete) μ€νλ©λλ€.
Runtime μμ μμ JVMμ ν΅ν΄ λμνμ¬ μλ°λ μ΄μ체μ λ‘λΆν° λ 립μ μΈ νκ²½μμ μ€ν κ°λ₯νλ€λ μ₯μ μ κ°μ§κ³ μμ΅λλ€.
μ΄ λ² ν¬μ€ν μμ μ΄ JVMμ΄ λ΄λΆμμ μ΄λ»κ² λμνκ³ κ΅¬μ‘°λ μ΄λ€μ§ μμλ΄ μλ€.
JVMμ λμ λ°©μκ³Ό ꡬ쑰
1. μλ°λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€ννλ©΄ JVMμ μ΄μ체μ λ‘λΆν° λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ΅λλ€
-> ν λΉλ°μ μμ : Runtime Data Area
2. μλ° μ»΄νμΌλ¬κ° μλ° μμ€μ½λλ₯Ό μλ° λ°μ΄νΈ μ½λ(.class)λ‘ μ»΄νμΌ
3. μ΄ λ°μ΄νΈ μ½λ νμΌμ JVM λ΄λΆ Class Loaderλ₯Ό ν΅ν΄ Runtime Data Areaλ‘ λ‘λ©ν©λλ€.
- Class Loader
- μλ°λ μ€ν μμ μ λμ μΌλ‘ ν΄λμ€λ₯Ό μ½μ΄μ€κΈ° λλ¬Έμ, μ€ν μμ μμ μ½λκ° JVMκ³Ό μ°κ²°λ©λλ€. μ΄λ κ² λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λ©ν΄μ£Όλ μν μ νλ κ²μ΄ λ°λ‘ Class Loader.
- Javaμμ μμ€λ₯Ό μμ±ν νμΌμ .java -> μ€ν μμ μ .javaλ‘ λΆν° νμν μ½λλ₯Ό λ½μμ¨ μ΄ν μ΄μ§ νμΌλ‘ λ³νλ .class νμΌλ€μ μ μ¬νλ κ³³μ΄ Class Loader
- Runtime Data Area
- μ€ν μμ μ μ¬μ©νλ λ°μ΄ν°λ€μ μ΄μ체μ λ‘λΆν° ν λΉλ°μ λ©λͺ¨λ¦¬ μμμΈ Runtime Data Areaμ λ©μλ μμ, ν μμ, μ€ν μμ, PC λ μ§μ€ν°, λ€μ΄ν°λΈ λ©μλ μ€ν 5κ°μ§λ‘ ꡬλΆνμ¬ μ μ¬ν©λλ€.
- Class Loaderμμ λ‘λλ°μ .class νμΌλ€μ λ©μλ μμμ μ μ₯.
4. Runtime Data Areaμ λ‘λ©λ .class νμΌλ€μ Excution Engineμ ν΅ν΄ ν΄μλ©λλ€.
- Execution Engine
- Runtime Data Areaμ λ©μλ μμμ λ°°μΉλ .class νμΌλ€μ Execution Engineμ provideνμ¬, μ μλ λ΄μ©λλ‘ λ°μ΄νΈ μ½λλ₯Ό μ€νμν΅λλ€. (μ€μ μ μΌλ‘ μ΄μ§νμΌλ€μ΄ μ€νλλ μ€μν κ³³)
5. ν΄μλ λ°μ΄νΈ μ½λλ Runtime Data Areaμ κ° μμμ λ°°μΉλμ΄ μννλ©°, μ΄ κ³Όμ μμ Excution Engineμ μν΄ κ°λΉμ§ 컬λ ν°κ° λμνλ©°, μ€λ λ λκΈ°ν λν μ΄λ£¨μ΄μ§λλ€.
- GC(Garbage Collector)
- λ μ΄μ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ νμν΄μ£Όλ μν
- μ΄ λλΆμ κ°λ°μλ λ³λλ‘ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νμ§ μμλ λ©λλ€.
- μ΄λ»κ² λμνλκ°?
- Heap λ©λͺ¨λ¦¬ μμμ μμ±(μ μ¬)λ κ°μ²΄λ€ μ€μ μ°Έμ‘°λμ§ μμ κ°μ²΄λ€μ νμ ν μ κ±°νλ μν μ νλ©° ν΄λΉ μν μ νλ μκ°μ μ νν μΈμ μΈμ§λ₯Ό μ μ μμ΅λλ€.
Runtime Data Areaμ κ° μμμ μ΄λ€κ² μ μ₯λ κΉ?
λͺ¨λ Thraedκ° κ³΅μ νμ¬ μ¬μ©νλ 곡κ°
1. λ©μλ μμ ( Method Area )
- μκΉ μΈκΈνλ―μ΄ μ€ν μμ μ μ¬μ©λλ .class νμΌλ€μ΄ λ©μλ μμμ μ μ₯λ©λλ€.
- λΏλ§ μλλΌ ν΄λμ€ λ©€λ² λ³μμ μ΄λ¦, λ°μ΄ν° νμ , μ κ·Ό μ μ΄μ μ 보μ κ°μ΄ κ°μ’ νλ μ 보λ€κ³Ό λ©μλ μ 보 λ°μ΄ν° Type μ 보, static λ³μ, final class, μμ ν λ±μ΄ μ΄ κ³³μ μ μ₯λ©λλ€.
2. ν μμ ( Heap Area )
- new ν€μλλ‘ μμ±λ κ°μ²΄, λ°°μ΄μ΄ μ μ₯λλ κ³³
- ν¨μ¨μ μΈ κ°λΉμ§ 컬λ ν° λμμ μν΄ ν μμμ λ€μ 3κ°μ§ μμμΌλ‘ λλ©λλ€.
- Young Generation : κ°μ²΄κ° μμ±λμλ§μ μ μ₯λκ³ μκΈ΄μ§ μΌλ§ λμ§ μμ κ°μ²΄κ° μ μ₯λλ 곡κ°.
- Tenured Generation : Young Generation 곡κ°μ΄ κ½ μ°Όμ λ μλ‘μ΄ κ°μ²΄λ λ°°μ΄μ΄ μμ±λλ©΄ κΈ°μ‘΄μ Young Generationμ μλ κ°μ²΄ λ° λ°°μ΄μ μ°Έμ‘°κ° μ΄κ³³μ OldμμμΌλ‘ μ΄λλκ±°λ νμλ©λλ€.
- Young Generationκ³Ό Tenured Generation μμμ GCλ₯Ό Minor GCλΌκ³ νλ€κ³ νλ€.
- Old μμμ ν λΉλ λ©λͺ¨λ¦¬κ° νμ©μΉλ₯Ό λκ² λλ©΄, Old μμμ μλ λͺ¨λ κ°μ²΄λ€μ κ²μ¬νμ¬ μ°Έμ‘°λμ§ μλ κ°μ²΄λ€μ νκΊΌλ²μ μμ νλ GCκ° μ€νλ©λλ€.
- Old μμμ λ©λͺ¨λ¦¬λ₯Ό νμνλ GCλ₯Ό Major GCλΌκ³ νλ€κ³ νλ€.
μ€λ λλ§λ€ νλμ© μμ±λλ 곡κ°
1. μ€ν μμ ( Stack Area )
- μ§μλ³μ, νλΌλ―Έν° , λ¦¬ν΄ κ°, μ°μ°μ μ¬μ©λλ μμ κ° λ±μ΄ μμ±λλ μμ
2. PC λ μ§μ€ν°
- μ€λ λκ° μμ±λ λλ§λ€ μμ±λλ μμμΌλ‘, νμ¬ μ€λ λκ° μ€νλλ λΆλΆμ μ£Όμμ λͺ λ Ήμ μ μ₯νκ³ μλ μμ
3. λ€μ΄ν°λΈ λ©μλ μ€ν
- μλ° μ΄μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μ€νν λ λ©λͺ¨λ¦¬ μμμΌλ‘ μΌλ°μ μΈ C μ€νμ μ¬μ©
- λ³΄ν΅ C/C++ μ½λλ₯Ό μννκΈ° μν μ€ν
JVMμ ꡬ쑰μ λμλ°©μμ λν΄ μμ보μμ΅λλ€.
μ΄ μ μλ μλ°λ₯Ό μ¬μ©νμ¬ κ°λ°ν λ μλ°μ λμλ°©μλ λͺ¨λ₯΄κ³ κ·Έλ₯ μ무 μκ°μμ΄ μ¬μ©νλλ° μ΄λ κ² μμΈν μμ보λ μλ° μ ν리μΌμ΄μ μ μ€νμ리μ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ±μ λμμ리λ₯Ό μ΄ν΄νλλ° λ§μ λμμ΄ λ κ² κ°μ΅λλ€.
<μ°Έκ³ μλ£>
'π Backend > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] PSμμ μμ£Ό μ¬μ©νλ μ λ ₯ ν΄λμ€μ λν΄ (0) | 2023.09.21 |
---|---|
[Java] νμ€ μ μΆλ ₯ ν΄λμ€ Systemμ λν΄ (0) | 2023.09.21 |
[Java] String κ°μ²΄μ λΆλ³μ±(Immutablity)μ λν΄ (0) | 2023.09.20 |
[Java] κΈ°λ³Έμ μΈ λ¬Έλ²λ€ - μλ£ν, μμ, 리ν°λ΄μ λν΄ (0) | 2023.09.20 |
[Java] Java μΈμ΄μ νΉμ§, μ₯μ μ λν΄ (0) | 2023.09.20 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422