JVMμ΄λ?
μλ° κ°μ λ¨Έμ (Java Virtual Machine)μ μ½μλ‘μ, μ§μνμλ©΄ 'μλ°λ₯Ό μ€ννκΈ° μν κ°μ κΈ°κ³'λΌκ³ ν μ μμ΅λλ€. 'κ°μ κΈ°κ³'λ SWλ‘ κ΅¬νλ HWλ₯Ό λ»νλ λμ μλ―Έμ μ©μ΄μ΄λ©°, μ»΄ν¨ν° μ±λ₯μ΄ ν₯μλ¨μ λ°λΌ μ μ λ λ§μ HWλ€μ΄ SWν λμ΄ μ»΄ν¨ν° μμΌλ‘ λ€μ΄μ€κ³ μμ΅λλ€. μ΄μ λ§μ°¬κ°μ§λ‘ 'κ°μ μ»΄ν¨ν°' λν μ€μ μ»΄ν¨ν°κ° μλ μννΈμ¨μ΄λ‘ ꡬνλ μ»΄ν¨ν°λΌκ³ μκ°νλ©΄ λ©λλ€.
νμ¬νΌ, μλ°λ‘ μμ±λ μν리μΌμ΄μ μ λͺ¨λ JVMμμλ§ μ€νλκΈ° λλ¬Έμ μλ° μν리μΌμ΄μ μ΄ μ€νλκΈ° μν΄μλ λ°λμ JVMμ΄ νμν©λλ€. μΌλ° μν리μΌμ΄μ μ½λλ OSλ§ κ±°μΉκ³ HWλ‘ μ λ¬λλλ° λΉν΄ Javaμ ν리μΌμ΄μ μ JVMμ νλ² λ κ±°μΉκΈ° λλ¬Έμ, κ·Έλ¦¬κ³ μ€ν μμ ν΄μ(Interpret)λκΈ° λλ¬Έμ μλκ° λ리λ€λ λ¨μ μ΄ μμ΅λλ€. νμ§λ§ μ΅κ·Όμ μ»΄νμΌλ μλ°μ½λμΈ λ°μ΄νΈμ½λλ₯Ό HWμ κΈ°κ³μ΄λ‘ λ°λ‘ λ³νν΄μ£Όλ JIT μ»΄νμΌλ¬μ ν₯μλ μ΅μ ν κΈ°μ λ‘ μΈν΄ μλμ κ²©μ°¨κ° λ§μ΄ μ€κ² λμμ΅λλ€.
μ΄λ¬ν λ¨μ λ μλ λ°λ©΄μ, Javaμν리μΌμ΄μ μ JVMκ³Ό μνΈμμ©μ νκΈ° λλ¬Έμ OSμ HWμ λ 립μ μ΄λΌ WORAκ° μ€νμ΄ κ°λ₯ν κ²μ λλ€. νμ§λ§, JVMμ OSμ μνΈμμ©μ νκΈ° λλ¬Έμ ν΄λΉ OSμ λ§λ JVMμ΄ νμν©λλ€.
JVMμ λ©λͺ¨λ¦¬ ꡬ쑰
μμ© νλ‘κ·Έλ¨μ΄ μ€νμ΄ λλ©΄. JVMμ μμ€ν μΌλ‘λΆν° νλ‘κ·Έλ¨μ μννλλ° νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ JVMμ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬νκ² λ©λλ€. κ·Έ μ€ 3κ°μ§ μ£Όμ μμμ λ€μκ³Ό κ°μ΅λλ€.
λ©μλ μμ
νλ‘κ·Έλ¨ μ€νμ€ μ΄λ€ ν΄λμ€κ° μ¬μ©λλ©΄, JVMμ ν΄λΉ ν΄λμ€μ ν΄λμ€νμΌμ μ½μ΄μ λΆμνμ¬ ν΄λμ€μ λν μ 보μ κ·Έ ν΄λμ€μ λ³μλ₯Ό μ΄κ³³μ μ μ₯νλ€.
ν
μΈμ€ν΄μ€κ° μμ±λλ 곡κ°μ΄λ€. νλ‘κ·Έλ¨ μ€ν μ€ μμ±λλ μΈμ€ν΄μ€λ€μ΄ λͺ¨λ μ¬κΈ°μ μ μ₯λλ€. μ¦, μΈμ€ν΄μ€ λ³μλ€μ΄ μμ±λλ 곡κ°μ΄λ€.
νΈμΆμ€ν
νΈμΆμ€νμ λ©μλμ μμ μ νμν λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νλ€. λ©μλκ° νΈμΆλλ©΄, νΈμΆμ€νμ νΈμΆλ λ©μλλ₯Ό μν λ©λͺ¨λ¦¬κ° ν λΉλλ©°, μ΄ λ©λͺ¨λ¦¬λ λ©μλκ° μμ μ μννλ λμ μ§μλ³μ(맀κ°λ³μ ν¬ν¨)λ€κ³Ό μ°μ°μ μ€κ°κ²°κ³Ό λ±μ μ μ₯νλλ° μ¬μ©λλ©°, λ©μλκ° μμ μ λ§μΉλ©΄ ν λΉλμλ λ©λͺ¨λ¦¬κ³΅κ°μ λ°νλμ΄ μ§μμ§λ€. μ€νμ μλμ리μ²λΌ 맨 μμ λ©μλκ° νμ¬ μ€νλλ λ©μλμ΄λ©°, 맨 μμ λ©μλκ° μλ£λ ν λ©λͺ¨λ¦¬λ₯Ό λ°λ©νκ³ κ·Έ λ°μ μλ λ©μλκ° μ€νμ΄ λλ€. λΉμ°ν μλμ μλ λ©μλκ° μμ μλ λ©μλλ₯Ό νΈμΆν λ©μλμ΄λ€.
JVMμ λμκ³Όμ
- νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ JVMμ OSλ‘λΆν° λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°λλ€. μμ μΈκΈνλ λ©λͺ¨λ¦¬ ꡬ쑰μ λ°λΌ μμμ λλμ΄ κ΄λ¦¬νλ€.
- μλ°μ»΄νμΌλ¬κ° μλ° μμ€μ½λλ₯Ό μ½μ΄λ€μ΄ μλ° λ°μ΄νΈμ½λ(.class)λ‘ λ³νμν¨λ€.
- Class Loaderλ₯Ό ν΅ν΄ classνμΌλ€μ JVMμΌλ‘ λ‘λ©νλ€.
- λ‘λ©λ classνμΌλ€μ Execution engineμ ν΅ν΄ ν΄μλλ€.
- ν΄μλ λ°μ΄νΈμ½λλ Runtime Data Areaμ λ°°μΉλμ΄ μ€μ§μ μΈ μνμ΄ μ΄λ£¨μ΄μ§κ² λλ€.
- μμ μ€νκ³Όμ μμμ JVMμ νμμ λ°λΌ Thread Synchronization, GCκ°μ κ΄λ¦¬ μμ μ μννλ€.