JVM - low-hill/Knowledge GitHub Wiki
JVM(Java Virtual Machine) μ΄λ?
JVMμ΄λ μλ° λ°μ΄νΈ μ½λλ₯Ό μ€νμν€κΈ° μν κ°μμ λ¨Έμ μ΄λ€. μλ°λ‘ μμ±λ λͺ¨λ νλ‘κ·Έλ¨μ μλ° κ°μ λ¨Έμ μμλ§ μ€νλ μ μμΌλ―λ‘, μλ° νλ‘κ·Έλ¨μ μ€ννκΈ° μν΄μλ λ°λμ μλ° κ°μ λ¨Έμ μ΄ μ€μΉλμ΄ μμ΄μΌ νλ€.
JVMμ μλ‘ λ€λ₯Έ μ΄μ체μ μμ μλ¬΄λ° μΆκ° μ‘°μΉ μμ΄ μλ° νλ‘κ·Έλ¨μ΄ μ€νλλλ‘ νλ€. λ°λΌμ κ°λ°μλ ν λ²λ§ νλ‘κ·Έλ¨μ μμ±νλ©΄, λͺ¨λ μ΄μ체μ μμ κ°μ΄ μ¬μ©ν μ μλ μ₯μ μ΄ μλ€.
- JVMμ μ΄μ체μ μ μ’ μμ μ΄λ―λ‘ κ° μ΄μ체μ μ λ§λ μλ° κ°μ λ¨Έμ μ μ€μΉν΄μΌ νλ€.
JVM μν
- Java bytecode μ€ν: μλ° μ»΄νμΌλ¬μ μν΄ λ³νλ byte codeλ₯Ό ν΄μνκ³ μ€ννμ¬ μλ° νλ‘κ·Έλ¨μ΄ μ¬λ¬ νλ«νΌμμ λμν μ μλλ‘ νλ€.
- λ©λͺ¨λ¦¬ κ΄λ¦¬: Java μ ν리μΌμ΄μ
μ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ€. μ΄λ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ ν(Heap), μ€ν(Stack), λ©μλ μμ(Method Area)μΌλ‘ ꡬλΆνμ¬ κ΄λ¦¬νλ€.
- νμ μΈμ€ν΄μ€ λ³μλ₯Ό μ μ₯νλ λ° μ¬μ©λκ³ , μ€νμ λ©μλκ° νΈμΆλ λ λ©μλμ μ€ν νλ μμ΄ μ μ₯λλ μμμΌλ‘ λ©μλμ νΈμΆκ³Ό κ΄κ³λλ μ§μ λ³μμ λ§€κ°λ³μλ₯Ό μ μ₯νλ λ° μ¬μ©
- λ©μλ μμμ ν΄λμ€ μ 보μ μμ ν λ±μ μ μ₯νλ λ° μ¬μ©
- ν΄λμ€μ λν μ 보μ ν¨κ» μ μ λ³μ(static variable)κ° μ μ₯
- κ°λΉμ§ 컬λ ν°(garbage collector): μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ νμνμ¬ κ°λ°μκ° λ°λ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νμ§ μμλ λλ―λ‘ μ ν리μΌμ΄μ μ μ λ’°μ±μ ν₯μμν¬ μ μλ€.
- JIT μ»΄νμΌλ¬(Just-In-Time compiler): μλ° μ»΄νμΌλ¬κ° μμ±ν byte codeλ₯Ό νλ‘κ·Έλ¨μ΄ μ€ν μ€μΈ λ°νμμ λ°λ‘ κΈ°κ³μ΄λ‘ λ³ννλ λ° μ¬μ©νλ€. λμ λ²μ(dynamic translation)μ΄λΌκ³ λ λΆλ¦¬λ μ΄ κΈ°λ²μ νλ‘κ·Έλ¨μ μ€ν μλλ₯Ό ν₯μμν€κΈ° μν΄ κ°λ°λμλ€. λμ λ‘λ©: JVMμ λ°νμμ ν΄λμ€λ₯Ό λ‘λνκ³ ν΄λμ€μ λ©μλ, νλ, μμκ΄κ³ λ±μ λΆμνλ€. μ΄ λμ λ‘λλ₯Ό λ΄λΉνλ ν΄λμ€ λ‘λ(class loader)λ ν΄λμ€ μ°Έμ‘°μμ μ ν΄λμ€ νμΌμ λ‘λνκ³ κ°μ²΄λ₯Ό μμ±νλ€. λν λ°νμμ ν΄λμ€ κ° μ°Έμ‘° κ΄κ³λ₯Ό ν΄μνμ¬ νΉμ ν΄λμ€μμ μ¬μ©λ λ©μλμ μμ±μ κ²°μ νλ λ° μ¬μ©λ©λλ€.
GC
- Minor GC
- Young μμμμ GCκ° λ°μ μ
- Major GC
- Old μμμ΄ κ°λμ°¨λ©΄ λ°μ
- Full GC
- Old μμμμ λ°μνλ GC
GC μΌμ λ§νΉ
μΌμ λ§νΉμ GCμκ³ λ¦¬μ¦μ μΌμ’ μΌλ‘ λ©λͺ¨λ¦¬μμ μμ‘΄νκ³ νμν΄μΌ νλ κ°μ²΄ μ 보λ₯Ό νμνλ λ° μ¬μ©λλ€. JVMμ λ©λͺ¨λ¦¬μ μλ κ°μ²΄λ₯Ό ν°μ, νμ, κ²μ μμΌλ‘ λλλ€.
- ν°μ(White): GCμ μν΄ μ€μΊλμ§ μλ κ°μ²΄
- κ²μ μ(Black): GCμ μν΄ μ€μΊλμκ³ κ°μ²΄μ ν΄λΉ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ€λ₯Έ κ°μ²΄κ° λͺ¨λ μμ‘΄
- νμ(Grey): GCμ μν΄ μ€μΊλμμ§λ§ κ°μ²΄κ° μ°Έμ‘°λ λ€λ₯Έ κ°μ²΄λ μ€μΊλμ§ μμλ€λκ²μ μλ―Έ
- STW(stop-the-world) GCμ¬μ΄ν΄μ΄ λ°μνμ¬ κ°λΉμ§λ₯Ό μμ§νλ λμ GCλ₯Ό μ€ννλ μ€λ λλ₯Ό μ μΈν λλ¨Έμ§ μ€λ λλ λͺ¨λ μμ μ λ©μΆλ€. λκ°μ κ²½μ° GC νλμ΄λ STW μκ°μ μ€μ΄λκ²μ΄λ€.