- μ€ν κΈ°λ°μ κ°μ λ¨Έμ .
- JVMμ μν μ μλ° μ ν리μΌμ΄μ μ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ μ½μ΄λ€μ¬ μλ° APIμ ν¨κ» μ€ννλ κ²μ΄λ€.
- Javaμ OS μ¬μ΄μμ μ€κ°μ μν μ μννμ¬ Javaκ° OSμ ꡬμ λ°μ§ μκ³ μ¬μ¬μ© κ°λ₯νκ² ν΄μ€λ€.
- λ©λͺ¨λ¦¬ κ΄λ¦¬, Garbage Collection(GCλ₯Ό ν΅ν΄ μμμ κ΄λ¦¬)μ μννλ€.
- μλ° λ°μ΄νΈ μ½λλ₯Ό μ€νν μ μλ 주체μ΄λ€.
[JVMμ μμΌμ νλ μ΄μ λ λκΉ?]
-> νμ λ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νμ¬ μ΅κ³ μ μ±λ₯μ λ΄κΈ° μν΄μλΌ ν μ μλ€. λμΌν κΈ°λ₯μ νλ‘κ·Έλ¨μ΄λλΌλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ°λΌμ μ±λ₯μ΄ μ’μ°λκΈ° λλ¬Έμ JVMμ΄ νλ μν μ μ΄ν΄νκ³ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νμ¬ μ΅κ³ μ μ±λ₯μ λΌ μ μμ κ²μ΄λ€.
[μλ° νλ‘κ·Έλ¨ μ€ν κ³Όμ ]
- νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ JVMμ OSλ‘λΆν° μ΄ νλ‘κ·Έλ¨μ΄ νμλ‘ νλ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°λλ€. JVMμ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬νλ€.
- μλ° μ»΄νμΌλ¬(javac)κ° μλ° μμ€ μ½λλ₯Ό μ½μ΄λ€μ¬ μλ° λ°μ΄νΈ μ½λ(.class)λ‘ λ³νμν¨λ€.
- Class Loaderλ₯Ό ν΅ν΄ class νμΌλ€μ JVMμΌλ‘ λ‘λ©νλ€.
- λ‘λ©λ class νμΌλ€μ Execution Engineμ ν΅ν΄ ν΄μλλ€.
- ν΄μλ λ°μ΄νΈ μ½λλ Runtime Data Areaμ λ°°μΉλμ΄ μ€μ§μ μΈ μνμ΄ μ΄λ£¨μ΄μ§κ² λλ€. μ΄λ¬ν μ€ν κ³Όμ μμμ JVMμ νμμ λ°λΌ Thread Synchronizationκ³Ό GC κ°μ κ΄λ¦¬ μμ μ μννλ€.
[Class Loader(ν΄λμ€ λ‘λ)]
- Runtimμμ JVMλ΄λ‘ ν΄λμ€(.class νμΌ)λ₯Ό λ‘λνκ³ λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ€. (Runtime : ν΄λμ€λ₯Ό μ²μμΌλ‘ μ°Έμ‘°ν λ.)
- μ¬μ©νμ§ μλ ν΄λμ€λ€μ λ©λͺ¨λ¦¬μμ μμ νλ€.
- λμ λ‘λλ₯Ό λ΄λΉνλ€.
[Execution Engine(μ€ν μμ§)]
- ν΄λμ€λ₯Ό μ€νμν€λ μν μ΄λ€.
- ν΄λμ€ λ‘λκ° JVM λ΄μ Runtime Data Areaμ λ°μ΄νΈ μ½λλ₯Ό λ°°μΉμν€κ³ μ΄κ²μ μ€ν μμ§μ μν΄μ μ€νλλ€.
- μλ° λ°μ΄νΈ μ½λλ λΉκ΅μ μΈκ°μ΄ 보기 νΈν ννλ‘ κΈ°μ λ κ²μ΄λ€. κ·Έλμ μ€ν μμ§μ μ΄μ κ°μ λ°μ΄νΈ μ½λλ₯Ό μ€μ λ‘ JVM λ΄λΆμμ κΈ°κ³κ° μ€νν μ μλ ννλ‘ λ³κ²½νλ€.
- μ€ν μμ§μ μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ€.
- 2κ°μ§ λ°©μμ΄ μ‘΄μ¬νλ€.
- μ΅μ΄μ JVMμ μΈν°νλ¦¬ν° λ°©μμ΄μκΈ° λλ¬Έμ μλκ° λλ¦° λ¨μ μ΄ μ‘΄μ¬νμ§λ§, JIT μ»΄νμΌλ¬ λ°©μμ ν΅ν΄ μ΄ μ μ 보μνλ€.
- Interpreter(μΈν°ν리ν°)
- μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ€.
- ν μ€μ© μ€ννκΈ° λλ¬Έμ λ리λ€.
- JIT(Just-In-Time) Compiler
- μΈν°νλ¦¬ν° λ°©μμ λ¨μ μ 보μνκΈ° μν΄ λ±μ₯νλ€.
- μΈν°νλ¦¬ν° λ°©μμΌλ‘ μ€ννλ€κ° μ μ ν μμ μ λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λλ‘ λ³κ²½νκ³ μ΄νμλ λ μ΄μ μΈν°ν리ν νμ§ μκ³ λ€μ΄ν°λΈ μ½λλ‘ μ§μ μ€ννλ λ°©μμ΄λ€.
- λ€μ΄ν°λΈ μ½λλ μΊμμ 보κ΄νκΈ° λλ¬Έμ ν λ² μ»΄νμΌλ μ½λλ λΉ λ₯΄κ² μνλλ€.
- ν λ²λ§ μ€νλλ μ½λλΌλ©΄ JIT μ»΄νμΌλ¬κ° μ»΄νμΌνλ κ² μΈν°ν리ν νλ κ²λ³΄λ€ μ€λ 걸리λ―λ‘ μΈν°ν리ν νλ κ²μ΄ μ 리νλ€.
- μ΄μ²λΌ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό μνλλμ§ μ²΄ν¬νκ³ μΌμ μ λλ₯Ό λμ λλ§ μ»΄νμΌμ μννλ κ² μ’λ€.
[Garbage Collector]
- GCλ₯Ό μννλ λͺ¨λμ΄ μ‘΄μ¬νλ€.
[Runtime Data Area]
- JVMμ΄ νλ‘κ·Έλ¨μ μννκΈ° μν΄ OSλ‘λΆν° ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€.
- μ΄ κ³΅κ°μ μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬νλ€.
-
PC Register
- Threadκ° μμλ λ, κ°κ°μ Thread λ³λ‘ μμ±λλ 곡κ°μΌλ‘ νμ¬ μν μ€μΈ JVM λͺ λ Ήμ΄ μ£Όμλ₯Ό κ°μ§κ² λλ€.
-
JVM μ€ν μμ
- νλ‘κ·Έλ¨μ μ€ν κ³Όμ μμ μμλ‘ ν λΉλμλ€κ° λ©μλλ₯Ό λΉ μ Έλκ°λ©΄ λ°λ‘ μλ©Έλλ νΉμ±μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μμμ΄λ€.
- λ©μλμ 맀κ°λ³μ, μ§μ λ³μ λ± λ©μλμ μ 보λ₯Ό μ μ₯νλ€.
-
Natvie Method Stack
- JavaμΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν μμμ΄λ€.
- μλ° νλ‘κ·Έλ¨μ΄ μ»΄νμΌ λμ΄ μμ±λλ λ°μ΄νΈ μ½λκ° μλ μ€μ μ€νν μ μλ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ΄λ€.
-
Method Area(Class Area, Static Area)
- ν΄λμ€ μ 보λ₯Ό μ²μ λ©λͺ¨λ¦¬ 곡κ°μ μ¬λ¦΄ λ, μ΄κΈ°ν λλ λμμ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°.
- λͺ¨λ μ°λ λκ° κ³΅μ νλ λ©λͺ¨λ¦¬ μμμ΄λ€. ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ, Static λ³μ λ±μ λ°μ΄νΈ μ½λλ₯Ό 보κ΄νλ€.
- Runtime Constant Poolμ΄λΌλ κ²μ΄ μ‘΄μ¬νλ©°, μ΄λ λ³λμ κ΄λ¦¬ μμμΌλ‘ μμ μλ£νμ μ μ₯νμ¬ μ°Έμ‘°νκ³ μ€λ³΅μ λ§λ μν μ μννλ€. (κ° ν΄λμ€μ μΈν°νμ΄μ€μ μμ, λ©μλμ νλμ λν λͺ¨λ λ νΌλ°μ€λ₯Ό λ΄κ³ μλ ν μ΄λΈμ΄λ€.)
- Java 7λΆν° String Constant Poolμ Heap μμμΌλ‘ λ³κ²½λμ΄ GCμ κ΄λ¦¬ λμμ΄ λμλ€.
-
Heap(ν μμ)
- κ°μ²΄λ₯Ό μ μ₯νλ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€.
- λ°νμμ λμ μΌλ‘ ν λΉνμ¬ μ¬μ©νλ μμ.
new
μ°μ°μλ‘ μμ±λ κ°μ²΄μ λ°°μ΄μ μ μ₯νλ€.- ν΄λμ€ μμμ μ¬λΌμ¨ ν΄λμ€λ€λ‘λ§ κ°μ²΄λ‘ μμ±ν μ μμΌλ©°, μΈ λΆλΆμΌλ‘ λλ μ μλ€.
- GCμ κ΄λ¦¬ λμμ ν¬ν¨λλ€.
-
New/Young μμ
- Eden : κ°μ²΄λ€μ΄ μ΅μ΄λ‘ μμ±λλ 곡κ°.
- Survivor 0/1 : Edenμμ μ°Έμ‘°λλ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°.
-
Old μμ
- New μμμμ μΌμ μκ° μ°Έμ‘°λκ³ μ΄μλ¨μ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°μ΄λ€.
- Eden μμμμ μΈμ€ν΄μ€κ° κ°λμ°¨κ² λλ©΄ 첫 λ²μ§Έ GCκ° λ°μνλ€. (minor GC)
- Eden μμμ μλ κ°λ€μ Survivor 1 μμμ 볡μ¬νκ³ , μ΄ μμμ μ μΈν λλ¨Έμ§ μμμ κ°μ²΄λ₯Ό μμ νλ€.
- Eden μμμμ GCκ° ν λ² λ°μν ν μ΄μλ¨μ κ°μ²΄λ Survivor μμμΌλ‘ μ΄λνλ€. μ΄ κ³Όμ μ λ°λ³΅νλ€κ° μ΄μλ¨μ κ°μ²΄λ Old μμμΌλ‘ μ΄λλλ€.
- Permanent Generation
- μμ±λ κ°μ²΄λ€μ μ£Όμκ°μ΄ μ μ₯λλ 곡κ°μ΄λ€.
- 리νλ μ μ μ¬μ©νμ¬ λμ μΌλ‘ ν΄λμ€κ° λ‘λ©λλ κ²½μ° μ¬μ©λλ€.
- Old μμμμ μ΄μλ¨μ κ°μ²΄κ° μμν λ¨μμλ κ³³μ΄ μλλ€.
- μ΄ μμμμ λ°μνλ GCλ Major GCμ νμμ ν¬ν¨λλ€.