π€ JVMμ΄λ?
JVM(Java Virtual Machine)μ μλ°λ₯Ό μ€ννκΈ° μν κ°μ κΈ°κ³μ λλ€.
μλ°λ‘ μμ±λ μ ν리μΌμ΄μ μ μΌλ°μ μΌλ‘ μμ±λ μ ν리μΌμ΄μ κ³Ό λ€λ₯΄κ² λͺ¨λ JVMμμλ§ μ€νλ©λλ€.
μλ°λ μ΄μ체μ μ λ 립μ μΈ νΉμ§μ κ°μ§κ³ μλλ°, κ·Έκ²μ΄ κ°λ₯ν μ΄μ λ JVMμμ μ€νλκΈ° λλ¬Έμ λλ€. Javaμ ν리μΌμ΄μ μ JVM νκ³ λ§ μνΈμμ©μ νκΈ° λλ¬Έμ λ€λ₯Έ OSμμλ νλ‘κ·Έλ¨μ λ³κ²½ μμ΄ μ€νμ΄ κ°λ₯ν©λλ€ λ°λΌμ μ΄μ체μ μ λ 립μ μ΄λΌκ³ ν μ μμ΅λλ€.
-λ¨ JVMμ μ΄μ체μ μ μ’
μμ μ΄κΈ° λλ¬Έμ ν΄λΉ μ΄μ체μ μμ μ€ν κ°λ₯ν JVMμ΄ νμν©λλ€.
μΌλ° μ ν리μΌμ΄μ μ μ½λλ λ°μ΄λ리μ½λλ‘ μ»΄νμΌ λμ΄ μ΄μ체μ λ§μ κ±°μΉκ³ νλμ¨μ΄λ‘ μ λ¬λλ λ°λ©΄μ Java μ ν리μΌμ΄μ μ JVMμ νλ² λ κ±°μΉκΈ° λλ¬Έμ, κ·Έλ¦¬κ³ λ°μ΄λ리μ½λλ‘ μ»΄νμΌλ μνκ° μλκ³ μ€ν μμ ν΄μ(interpret) λκΈ° λλ¬Έμ μλκ° λ리λ€λ λ¨μ μ κ°μ§κ³ μμ΅λλ€.
π»μΈν°ν리ν°(interpret)λ°©μ?
νλ‘κ·Έλλ° μΈμ΄λ‘ μμ±λ μ½λλ₯Ό μ€νμν€λ λ°©μ μ€ λνμ μΈ λ κ°μ§λ‘ μΈν°ν리ν°μ μ»΄νμΌ λ°©μμ΄ μλ€.
μ»΄νμΌλ¬λ μμ€μ½λ μ 체λ₯Ό ν΄μν ν, ν λ²μ μ€νλλ λ°©μμΌλ‘ μ»΄νμΌ μ΄ν μμ±λ μ€ν κ²°κ³Όλ¬Όμ μ€ν μλκ° λΉ λ¦ λλ€.
μΈν°ν리ν°λ νλ‘κ·Έλ¨ μ€ν μ μμ€μ½λμ κ° νμ ν μ€μ© λΆμνμ¬ λͺ λ Ήμ μ²λ¦¬νλ λ°©μμΌλ‘, μμ μ΄ κ°λ€ νκ³ λ°λ‘λ°λ‘ μ€νμ΄ κ°λ₯νμ§λ§ κ° νλ§λ€ μ°μμ μΌλ‘ λΆμνμ¬ μ€ννλ νκΈ° λλ¬Έμ μλκ° λ립λλ€.
π‘ κ·Έλ λ€λ©΄ μλ°λ λ¬΄μ¨ λ°©μμΌκΉ?
μΌλ°μ μΌλ‘ μμ€νμΌμ μ»΄νμΌν νμΌμ λͺ©μ νμΌμ΄λΌκ³ νλλ° λ³΄ν΅μ μΈμ΄(C/C++)λ λͺ©μ νμΌμ΄ λ°μ΄λ리 μ½λμ ννλ₯Ό κ°μ΅λλ€.
μλ°λ javaλ‘ μμ±λ μμ€νμΌ(. java)μ μλ° μ»΄νμΌλ¬(javac)λ₯Ό ν΅ν΄ λͺ©μ νμΌ(λ°μ΄νΈ μ½λ/. class)μ μμ±ν©λλ€. μ΄ν λ°μ΄νΈμ½λλ‘ μμ±λ λͺ©μ νμΌμ JVMμ ν΅ν΄ ν΄μλ ν μν λ©λλ€.
- javaμμ€ νμΌ μμ± → μ»΄νμΌλ¬(javac.exe)λ‘ λ°μ΄νΈ μ½λ νμΌ(.class)μμ± → JVM ꡬλ λͺ λ Ήμ΄(java.exe)λ‘ μ€ν
μλ° λ°μ΄νΈ μ½λ : JVMμ΄ μ΄ν΄λΌ μ μλ μ½λλ‘ μμ§ μ»΄ν¨ν°λ μ½μ μ μλ λ°κΈ°κ³μ΄.
λ°λΌμ μλ°λ μ»΄νμΌλ¬μ μΈν°νλ¦¬ν° λͺ¨λ ν΄λΉλλ€κ³ ν μ μμ΅λλ€.
π‘JVMμ ꡬ쑰
ν΄λμ€ λ‘λ(Class Loader)
JVM λ΄λ‘ ν΄λμ€(λ°μ΄νΈμ½λ, . class)λ₯Ό λ‘λνκ³ , λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λμ΄λ€. Runtime μμ λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λ©ν΄ μ£Όλ μν , μ¦ ν΄λμ€λ₯Ό μ²μμΌλ‘ μ°Έμ‘°ν λ, ν΄λΉ ν΄λμ€λ₯Ό λ‘λνκ³ λ§νΉ νλ€λ κ²μ λ§νλ€.
- λ‘λ : ν΄λμ€ νμΌμ κ°μ Έμμ JVMμ λ©λͺ¨λ¦¬μ λ‘λν©λλ€.
- λ§ν¬ : λ νΌλ°μ€(μ°Έμ‘°)λ₯Ό μ°κ²°νλ κ³Όμ ( μ°Έμ‘°λ ν κ°μ²΄κ° λ€λ₯Έ κ°μ²΄μμ μ°κ²° μλ¨μΌλ‘ μμ©νλ κ°μ²΄ κ°μ κ΄κ³λ₯Ό λ»νλ€. )
- κ²μ¦ : μλ° μΈμ΄ λͺ μΈ(Java Language Specification) λ° JVM λͺ μΈμ λͺ μλ λλ‘ κ΅¬μ±λμ΄ μλμ§ κ²μ¬ν©λλ€.
- μ€λΉ : ν΄λμ€κ° νμλ‘ νλ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ , ν΄λμ€μ μ μλ νλ, λ©μλ, μΈν°νμ΄μ€λ₯Ό λνλ΄λ λ°μ΄ν° ꡬ쑰λ₯Ό μ€λΉν©λλ€.
- λΆμ : ν΄λμ€μ μμ ν λ΄ λͺ¨λ μΈλ³Όλ¦ λ νΌλ°μ€λ₯Ό λ€μ΄λ νΈ λ νΌλ°μ€λ‘ λ³κ²½ν©λλ€.
- μ΄κΈ°ν : ν΄λμ€ λ³μλ€μ μ μ ν κ°μΌλ‘ μ΄κΈ°νν©λλ€. (static νλ) μ΄κ²μ λ€λ₯Έ λ©μλμμ μ°Έμ‘°ν΄μ μ¬μ©ν μ μμ΅λλ€.
κ°λ°νκ²½
- JRE(Java Runtime Environment) = JVM + νμ€ ν΄λμ€ λΌμ΄λΈλ¬λ¦¬
- JDE(Java Development Kit) = JRE + κ°λ°μ νμν λꡬ
λ©μλ νΈμΆμ ν΄λΉ λ©μλλ₯Ό κ°μ§ ν΄λμ€ λ°μ΄νΈμ½λκ° λ‘λ©λ μ μ΄ μλ€λ©΄, JVMμ JREλΌμ΄λΈλ¬λ¦¬ ν΄λμμ ν΄λμ€λ₯Ό μ°Ύκ³ μλ€λ©΄ CLASSPATH νκ²½λ³μμ μ§μ λ ν΄λμμ ν΄λμ€λ₯Ό μ°Ύλλ€.
λ©λͺ¨λ¦¬(JVM Runtime Data Area)
JVMμ΄ νλ‘κ·Έλ¨μ μννκΈ° μν΄ μ΄μ체μ λ‘λΆν° ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°μΌλ‘ ν¬κ² 5κ°μ§ μμμΌλ‘ λλ μ μλ€.
μ€λ λλ³ μ νλμ΄ κ³΅μ λλ μμ
- PC λ μ§μ€ν° (Program Counter Register) : μ°λ λ λ§λ€ μ‘΄μ¬νλ©° νμ¬ μ°λ λ λ΄μ μ€νμ€μΈ instruction μ£Όμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό κ°μ§λ€.
instruction : ν΄λμ€νμΌμ λ°μ΄νΈ μ½λλ€ νμ€ νμ€μ λ§νλ€. - JVM μ€ν μμ(Java Virtual Machine Stack) : νλ‘κ·Έλ¨ μ€νκ³Όμ μμ μμλ‘ ν λΉλμλ€κ° λ©μλκ° λΉ μ Έλκ°λ©΄ λ°λ‘ μλ©Έλλ νΉμ±μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μμ.
- λ€μ΄ν°λΈ λ©μλ μμ(Native method stack) : λ°μ΄νΈ μ½λκ° μλ μ€μ μ€νν μ μλ κΈ°κ²μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμ(javaκ° μλ λ€λ₯Έ μΈμ΄λ‘ μμ±λ μ½λλ₯Ό μν 곡κ°, λ°μ΄νΈ μ½λλ‘ μ ννμ¬ μ μ₯)
μ¬λ¬ μ€λ λμμ μ°Έμ‘°ν μ μλ 곡μ μμ
- λ©μλ μμ(Methode Area) : ν΄λμ€λ₯Ό μ²μ λ©λͺ¨λ¦¬ 곡κ°μ μ¬λ¦΄ λ μ΄κΈ°ν λλ λμμ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°, ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ°λ μμμΌλ‘ GCμ λμμ΄ μλλ©° λ©λͺ¨λ¦¬μ μμ£Όνλ€.
Runtime Constant Pool : classλ interfaceκ° μμ±λ λ JVMμ μν΄ μμ±, - Heap(ν μμ) : ν΄λμ€ κ°μ²΄, ν΄λμ€ κ°μ²΄μ μΈμ€ν΄μ€, λ°°μ΄ λ± κ°μ²΄λ€μ΄ μ μ₯λλ μμ(GCμ λμ)
μ€ν μμ§(Execution Engine)
- μΈν°νλ¦¬ν° (interpret) : μλ° λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ νμ€μ© μ€νν©λλ€. νμ€λ§λ€ λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌνλ κ²μ λλ€.
- JIT μ»΄νμΌλ¬ : μΈν°νλ¦¬ν° λ¨μ μ 보μνκΈ° μν΄ λμ , μΈν°νλ¦¬ν° λ°©μμΌλ‘ μ€ννλ€ μ μ ν μμ μ λ°μ΄νΈμ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λλ‘ λ³κ²½νκ³ , μ΄νμλ ν΄λΉ λ μ΄μ μΈν°ν리ν νμ§ μκ³ λ€μ΄ν°λΈ μ½λλ‘ μ§μ μ€ννλ λ°©μμ΄λ€. μΈν°ν리ν νλ κ²λ³΄λ€ ν¨μ¬ μ€λ 걸리λ―λ‘ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό μνλλμ§ μ²΄ν¬νκ³ , μΌμ κΈ°μ€μ λμ λμλ§ μ»΄νμΌμ μνν©λλ€. JVMμ ν΅μ¬μΌλ‘ JVM λ΄μμ μ±λ₯μ κ°μ₯ ν° μν₯μ μ€λλ€.
λ€μ΄ν°λΈ μ½λλ μΊμμ 보κ΄λκΈ° λλ¬Έμ μ»΄νμΌ λμλ€λ©΄ λΉ λ₯΄κ³ μνλλ€.
- GC(Garbage Collector) : λμ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄(Garbage)λ₯Ό λͺ¨μμ μ 리ν©λλ€.
Garbage : μ ν¨νμ§ μλ λ©λͺ¨λ¦¬, μ¦ μ£Όμλ₯Ό μμ΄λ²λ €μ μ¬μ©ν μ μλ λ©λͺ¨λ¦¬λ₯Ό λ§νλ€.
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA] νλ³ν(casting) (0) | 2023.08.05 |
---|---|
[JAVA] μλ°μ 리ν°λ΄(literal)? (0) | 2023.08.05 |
[JAVA] λ³μ(variable)μ κΈ°λ³Ένκ³Ό μ°Έμ‘°ν (0) | 2023.08.05 |
[JAVA] λ³μ(variable)μ μμ(constant) (0) | 2023.08.05 |
[JAVA] μλ° μΈμ΄μ νΉμ§? (0) | 2023.08.05 |