Java Virtual Machine, μλ° κ°μ λ¨Έμ μ μ€μλ§μΌλ‘, OSμ κ·μ½ λ°μ§ μκ³ Java μ½λλ₯Ό μ»΄ν¨ν°κ° μμ λ¨Ήμ μ μλλ‘ μ»΄νμΌ ν΄μ£Όλ μν μ νλ€.
JVMμ΄ μκΈ°μ μ°λ¦¬λ 리λ
μ€, μλμ°, λ§₯ λ€μν OS νκ²½μμ javaμ½λλ₯Ό μ€ν μν¬ μ μλ κ²μ΄λ€.
JVM λλΆμ Write Once, Run Anywhere μ κ°λ₯νκ² νλ€.
1) κ°λ°μκ° μλ° μμ€ νμΌ(.java)λ₯Ό μμ±νλ€.
2) μλ° μ»΄νμΌλ¬λ₯Ό μ΄μ©νμ¬ μλ° μμ€ νμΌμ μ»΄νμΌ νλ€. μ΄λ λμ€λ νμΌμ λ°μ΄νΈ μ½λλ‘, μμ§ JVMμ΄ μ΄ν΄ν μ μλ€. java μ½λμ μ΄μ§ μ½λμ μ€κ° μ§μ μ΄λΌ μκ°νλ©΄ λλ€.
1) λ°μ΄νΈ μ½λλ₯Ό ν΄λμ€ λ‘λμκ² μ λ¬νλ€.
2) ν΄λμ€ λ‘λλ λμ λ‘λ©μ ν΅ν΄ νμν ν΄λμ€λ€μ λ‘λ© λ° μ²΄ν¬ νμ¬ λ°νμ λ°μ΄ν° μμ(Runtime-DateAreas), μ¦ JVMμ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€.
3) μ€ν μμ§(Excution Engine)μ JVM λ©λͺ¨λ¦¬μ μ¬λΌμ¨ λ°μ΄νΈ μ½λλ€μ JVM λ΄λΆμμ μ€ν ν μ μλλ‘ μΈμ΄λ₯Ό λ³κ²½νλ€. λ³κ²½νλ λ°©λ²μ λκ°μ§κ° μλ€.
μλ°λ λμ μΌλ‘ μ½λλ€μ μ½μΌλ―λ‘, JVMμ΄ λμνλ€κ° ν΄λμ€ νμΌμ μ°Έμ‘°νλ μκ° λμ μΌλ‘ μ½μ΄μ JVMμ λ§ν¬ λλ€. μλ° ν΄λμ€ λ‘λλ λμ μΌλ‘ λ©λͺ¨λ¦¬μ λ‘λ© μμΌμ£Όλ μν μ νλ€.
JVMμ΄ νλ‘κ·Έλ¨μ μ€ν μν€κΈ° μν΄ OSλ‘ λΆν° λ³λλ‘ ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€.
ν¬κ² 5κ°μ§λ‘ λλλ€.
PC Register: μ€λ λκ° μμλ λ μμ±λλ©° μ€λ λλ§λ€ νλμ© μ‘΄μ¬νλ€. μ€λ λκ° μ΄λ€ λΆλΆμ μ΄λ€ λͺ λ ΉμΌλ‘ μ€νν΄μΌν μ§μ λν κΈ°λ‘μ νλ λΆλΆμΌλ‘ νμ¬ μν μ€μΈ JVMμ λͺ λ Ήμ μ£Όμλ₯Ό λνλΈλ€.
JVM Stack: νλ‘κ·Έλ¨ μ€ν κ³Όμ μμ μμλ‘ ν λΉ λμλ€κ° λ©μλλ₯Ό λΉ μ Έ λκ°λ©΄ λ°λ‘ μλ©Έλλ νΉμ±μ λ°μ΄ν°λ₯Ό λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μμμ΄λ€. λ©μλμ λ©μλ μ 보(λ©μλμ 맀κ°λ³μ, μ§μλ³μ, μμλ³μ, λ©μλ νΈμΆ μ£Όμ)λ₯Ό μ€νμ μλλ€. λ©μλλ₯Ό νΈμΆ ν λλ§λ€ κ°κ°μ μ€ν νλ μ(λ©μλλ₯Ό μν 곡κ°)μ΄ μμ±λλ€. λ©μλκ° λλλ©΄ νλ μ λ³λ‘ μμ νλ€.
Native Method Stack: μλ° μΈμ μΈμ΄λ‘ μμ±λ native μ½λλ€μ μν stackμ΄λ€. μλ‘ Java Native Interfaceλ₯Ό ν΅ν΄ νΈμΆλλ c/c++ λ±μ μ½λλ₯Ό μννλ€. Natice Methodλ₯Ό νΈμΆνκ² λλ©΄ Native Method Stackμ μλ‘μ΄ μ€ν νλ μμ μμ±νμ¬ νΈμ νλ€. μ΄λ JVM λ΄λΆμ μν₯μ μ£Όμ§ μκΈ° μν¨μ΄λ€.
Method Area: ν΄λμ€ μ 보λ₯Ό μ²μ λ©λͺ¨λ¦¬ 곡κ°μ μ¬λ¦΄ λ μ΄κΈ°ν λλ λμμ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ΄λ€. λͺ¨λ μ°λ λκ° κ³΅μ νλ λ©λͺ¨λ¦¬ μμμ΄λ€. ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ, static λ±μ λ°μ΄νΈ μ½λλ₯Ό 보κ΄νλ€.
Heap: νλ‘κ·Έλ¨ μμμ λμ μΌλ‘ ν λΉνμ¬ μ¬μ©νλ μμμ΄λ€. ν΄λμ€λ₯Ό μ΄μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ©΄ νμ μ μ₯λλ€. 곡μ λλ μμμ΄λ€.
κ°λΉμ§ 컬λ μ μ μλ°μ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©λ² μ€μ νλλ‘ JVMμ Heap μμμμ λμ μΌλ‘ ν λΉνλ λ©λͺ¨λ¦¬ μμ μ€ νμ μκ² λ λ©λͺ¨λ¦¬ μμμ μ£ΌκΈ°μ μΌλ‘ μμ νλ νλ‘μΈμ€μ΄λ€.
JREλ μλ° μ€ν νκ²½(Java Runtime Environment)μ μ½μλ‘ μλ°λ‘ λ§λ€μ΄μ§ νλ‘κ·Έλ¨μ μ€ν μν€κΈ° μν΄ νμν λΌμ΄λΈλ¬λ¦¬λ€κ³Ό κ°μ’ API, JVMμ΄ ν¬ν¨λμ΄ μλ€.
JDKλ μλ° κ°λ°λꡬ(Java Development Kit)μ μ½μλ‘ JRE + κ°λ°μ μν΄ νμν λꡬ (javac, javaλ±)λ€μ ν¬ν¨νλ€.