# JVM(Java Virtual Machine)
written by sohyeon, hyemin π‘
# 1. JVM(Java Virtual Machine)
JVMμ μλ°λ₯Ό μ€ννκΈ° μν κ°μ μ»΄ν¨ν°(μ€μ μ»΄ν¨ν°κ° μλ μννΈμ¨μ΄λ‘ ꡬνν κ²)μ΄λ€.
JVMμ JAVAμ OS μ¬μ΄μμ μ€κ°μ μν μ μννμ¬
JAVAκ° OSμ λ 립μ
μ΄λ©°, μ¬μ¬μ©μ΄ κ°λ₯νλ€.- μλ° μμ©νλ‘κ·Έλ¨μ OSκ° μλ JVMκ³Ό ν΅μ νκ³ , JVMμ μλ° μμ©νλ‘κ·Έλ¨μΌλ‘λΆν° μ λ¬λ°μ λͺ λ Ήμ ν΄λΉ OSκ° μ΄ν΄ν μ μλλ‘ λ³ννμ¬ μ λ¬νλ€.
JVMμ
λ©λͺ¨λ¦¬ κ΄λ¦¬
μGarbage Collection
μ μννλ€.
# 2. JVMμ ꡬ쑰
# Class Loader(ν΄λμ€ λ‘λ)
μλ° μ»΄νμΌλ¬λ₯Ό μ¬μ©ν΄μ .java
νμΌμ .class(λ°μ΄νΈμ½λ)
νμΌλ‘ μ»΄νμΌν¨. μ΄ν, Class Loaderλ₯Ό ν΅ν΄ JVMμ .class
νμΌμ λ‘λνκ³ , λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ
μ μννλ€.
# Execution Engine(μ€ν μμ§)
.class
νμΌμ μ€νμν€λ μν . ν΄λμ€ λ‘λκ° JVM λ΄μ Runtime Data Areaμ .class(λ°μ΄νΈμ½λ)
λ₯Ό λ°°μΉνκ³ , μ΄λ₯Ό μ€ν μμ§μ μν΄ μ€νλλ€.
Interpreter
λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ννλ μΈν°ν리ν°. ν μ€μ© μννκΈ° λλ¬Έμ λ리λ€λ λ¨μ μ΄ μλ€.JIT compiler(Just - In - Time)
JIT μ»΄νμΌλ¬λ μΈν°νλ¦¬ν° λ°©μμ λ¨μ μ 보μνκΈ° μν΄ λμ νλ€.
μΈν°νλ¦¬ν° λ°©μμΌλ‘ μ€ννλ€κ° μ μ ν μμ μ λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬λ€μ΄ν°λΈ μ½λ
λ‘ λ³κ²½νκ³ , μ΄νμλ λ€μ΄ν°λΈ μ½λλ₯Ό μ§μ μ€ννλ λ°©μμ΄λ€.
λ¨, JIT μ»΄νμΌλ¬κ° μ»΄νμΌνλ κ³Όμ μ λ°μ΄νΈ μ½λλ₯Ό μΈν°ν리ν νλ κ²λ³΄λ€ ν¨μ¬ μ€λ 걸리λ―λ‘, JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νλ JVMμ λ΄λΆμ μΌλ‘ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό μνλλμ§ νμΈνμ¬, μΌμ μ λλ₯Ό λμ λμλ§ μ»΄νμΌμ μννλ€.
# GC(Garbage Collector)
GCλ λμ ν λΉλ λ©λͺ¨λ¦¬ μμ(heap)
μ€μμ λ μ΄μ μ¬μ©νμ§ μλ μμμ νμ§νμ¬ μλμΌλ‘ ν΄μ§
νλ κΈ°λ²μΌλ‘, νλ‘κ·Έλλ¨Έκ° λ©λͺ¨λ¦¬λ₯Ό λ°λ‘ κ΄λ¦¬νμ§ μμλ λλ€.
# Runtime Data Area
μλ° νλ‘κ·Έλ¨μ μννκΈ° μν΄ OSμμ ν λΉ λ°μ λ©λͺ¨λ¦¬ 곡κ°μ μλ―Ένλ€.
PC Register
JVMμ μ€ν κΈ°λ°μ λ°©μμΌλ‘ μλνλλ°, CPUμ μ§μ Instuctionμ μννμ§ μκ³ , μ€νμμ Operand(μ£Όμ)λ₯Ό λ½μ μ΄λ₯Ό λ³λμ λ©λͺ¨λ¦¬ 곡κ°(PC Register)μ μ μ₯νλ€.
λ°λΌμ, νμ¬μ μ΄λ€ λͺ λ Ήμ μ€νν΄μΌν μ§μ λν λΆλΆμ κΈ°λ‘νλ€.JVM stack
νλ‘κ·Έλ¨ μ€νκ³Όμ μμ νΈμΆλ λ©μλμ νλΌλ―Έν°, μ§μ λ³μ, λ¦¬ν΄ κ° λ° μ°μ° κ° λ±μ΄ μμλ‘ μ μ₯λλ μμμ΄λ€.Native Method stack
μλ° νλ‘κ·Έλ¨μ΄ μ»΄νμΌλμ΄ μμ±λλ λ°μ΄νΈ μ½λκ° μλ μ€μ μ€νν μ μλ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ΄λ€.
JAVA Native Interfaceλ₯Ό ν΅ν΄ λ°μ΄νΈ μ½λλ‘ μ ννμ¬ μ μ₯νλ€.Heap
GCμ λμμ΄ λλ μμ. νλ‘κ·Έλ¨ μ€ν μ€ μμ±λλ μΈμ€ν΄μ€(new μ°μ°μ)λ λͺ¨λ Heap μμμ μμ±λλ€.
μ¦, μΈμ€ν΄μ€λ³μ(instance variable)λ€μ΄ μμ±λλ 곡κ°μ΄λ€.Method Area
νλ‘κ·Έλ¨ μ€ν μ€ μ΄λ€ ν΄λμ€κ° μ¬μ©λλ©΄, JVMμ ν΄λΉ ν΄λμ€μ ν΄λμ€νμΌ(*.class)μ μ½μ΄μ λΆμνμ¬ ν΄λμ€μ λν μ 보(ν΄λμ€ λ°μ΄ν°)λ₯Ό μ΄κ³³μ μ μ₯νλ€.
μ΄ λ, κ·Έ ν΄λμ€μ ν΄λμ€λ³μ(class variable)λ Method Area(λ©μλ μμ)μ ν¨κ» μμ±λλ€.
# Question
- JVMμ νΉμ§μ μ€λͺ νμμ€.
- JVMμ ꡬ쑰λ₯Ό μ€λͺ νμμ€.
- μλ° νλ‘κ·Έλ¨μ μ€ν κ³Όμ μ μ€λͺ νμμ€.
- GCμ λν΄ μ€λͺ νμμ€.
# Reference & Additional Resources
β μμ(inheritance) μλ°λ? β