(Java)JVM λ©λͺ¨λ¦¬ ꡬ쑰
πJVMμ΄λ?
JVMμ 'Java virtual machine'μ μ€μΈ λ§λ‘ 'μλ°λ₯Ό μ€ννκΈ° μν κ°μ λ¨Έμ ' μ¦ 'κ°μ μ»΄ν¨ν°'λΌκ³ ν μ μλ€.
'κ°μ μ»΄ν¨ν°'λ μ€μ νλμ¨μ΄κ° μλ μννΈμ¨μ΄λ‘ ꡬνλ μ»΄ν¨ν°λΌλ λ»μΌλ‘ μ»΄ν¨ν° μμ μ»΄ν¨ν°λΌκ³ ν μ μλ€.
μλ°λ‘ μμ±λ μ ν리μΌμ΄μ
μ μ΄ κ°μ μ»΄ν¨ν°(JVM)μμλ§ μ€νλκΈ° λλ¬Έμ, μλ° μ ν리μΌμ΄μ
μ΄ μ€νλκΈ° μν΄μλ λ°λμ JVMμ΄ νμνλ€.

μμ κ·Έλ¦Όμμ μ²λΌ CμΈμ΄ κ°μ κ²½μ° OSλ§ κ±°μΉκ³ νλμ¨μ΄λ‘ λ°λ‘ μ λ¬λλ κ²μ λ°ν΄ JAVAλ JVMμ νλ² λ κ±°μΉλ κ²μ λ³Ό μ μλ€.
κ·Έλ¦¬κ³ νλμ¨μ΄μ λ§κ² μμ ν μ»΄νμΌλ μνκ° μλκ³ μ€ν μ ν΄μ(interpret)λκΈ° λλ¬Έμ μλκ° λ리λ€λ λ¨μ μ κ°μ§κ³ μλ€.
κ·Έλ¬λ μμ¦μ λ°μ΄νΈμ½λ(μ»΄νμΌλ μλ° μ½λ)λ₯Ό νλμ¨μ΄μ κΈ°κ³μ΄λ‘ λ°λ‘ λ³νν΄μ£Όλ JIT μ»΄νμΌλ¬μ ν₯μλ μ΅μ ν κΈ°μ μ΄ μ μ©λμ΄μ μλμ 격차λ₯Ό λ§μ΄ μ€μλ€.

λ λ²μ§Έ μμ κ·Έλ¦Όμ μλ°κ° OSμ λ
립μ μΈ νΉμ§μ κ°κ³ μλ€λ κ²μ 보μ¬μ£Όλ κ·Έλ¦Όμ΄λ€.
μΌλ° μ ν리μΌμ΄μ
μ OSμ λ°λ‘ λ§λΏμ μκΈ° λλ¬Έμ OSμμ μ€νμν€κΈ° μν΄μλ μ ν리μΌμ΄μ
μ κ·Έ OSμ λ§κ² λ³κ²½ν΄μΌ νλ€. μ¦ OS μ’
μμ μ΄λΌλ λ¨μ μ κ°μ§κ³ μλ€.
νμ§λ§ μλ°μ κ²½μ° μ ν리μΌμ΄μ
κ³Ό OSμ μ€κ° λ¨κ³μμ μν΅νλ JVMμ΄ μκΈ° λλ¬Έμ λ€λ₯Έ OSμμλ νμ¬ OSμ λ§λ JVMμ λ€μ΄λ‘λνλ€λ©΄ νλ‘κ·Έλ¨μ λ³κ²½ μμ΄ μ€νμ΄ κ°λ₯νλ€. μ¦ OSμ λ
립μ μΈ μ₯μ μ κ°μ§κ³ μλ€.
μμ½νλ©΄ JVMμ΄λ 'κ°μ λ¨Έμ 'μΌλ‘ λ΄λΆμ μΈ λ³΅μ‘ν κ΅¬μ‘°λ‘ μλ° μ ν리μΌμ΄μ
μ μ€ννλ 주체λΌκ³ ν μ μλ€.
πJVM λ©λͺ¨λ¦¬ ꡬ쑰
μλ°μμμ μ 체μ μΈ μ€ν κ³Όμ μ μλμ μ΄λ―Έμ§μ κ°λ€.
μ΄μ λΆν° JVMμ ꡬ체μ μΈ μ€νκ³Όμ μ μμ보μ

μ°μ μμ€νμΌμ μμ±νκ³ μ μ₯νκ²λλ©΄ Java Compilerμ μν΄ .javaμ μμ€νμΌμ΄ JVMμ΄ μ΄ν΄ν μ μλ λ°μ΄νΈμ½λ(Bytecode)λ‘ μ΄λ£¨μ΄μ§ .classνμΌλ‘ μ μ₯λλ€.
1) Class Loader
λ°μ΄νΈμ½λλ‘ μμ±λ classνμΌμ JVMλ΄λ‘ λ‘λνλ μν μ νκ³ , μ΄λ κ² λ‘λ©λ classλ€μ Runtime Data Area λ°°μΉλλ€. (μ΄λ¬ν λ‘λ κ³Όμ μ μ΄μ체μ κ° λ΄λΉνλ€)
2) Execution Engine
Class Loaderμ μν΄ λ©λͺ¨λ¦¬μ μ μ¬λ ν΄λμ€μ Bytecodeλ€μ BinaryCode μ¦ κΈ°κ³μ΄λ‘ λ³κ²½νκ³ λͺ
λ Ήμ΄ λ¨μλ‘ μ€ννλ€.
λͺ
λ Ήμ΄μ μ€νμ μμμ μΈκΈν λ°μ κ°μ΄ μΈν°ν리ν°(Interpreter) λ°©μ λλ JIT(Just-In-Time) μ»΄νμΌλ¬ λ°©μμ΄ μλ€. JIT λ°©μμ κ²½μ° λ°μ΄νΈμ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννκΈ° λλ¬Έμ λΉ λ₯΄λ€λ μ₯μ μ΄ μμ§λ§ λΉμ©μ΄ λ°μνλ€λ λ¨μ μ΄ μλ€.
μΈν°νλ¦¬νΈ λ°©μμ μ€ν μ€ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ½μ΄κ°λ©΄μ ν΄λΉ κΈ°λ₯μ λμνλ κΈ°κ³μ΄ μ½λλ₯Ό μ€ννκΈ° λλ¬Έμ λ리λ€λ λ¨μ μ΄ μλ€.
3) Garbage Collector
Garbage Collector(GC)λ Heap λ©λͺ¨λ¦¬ μμμ μμ±(μ μ¬)λ κ°μ²΄λ€ μ€μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ€μ νμ ν μ κ±°νλ μν μ νλ€.
GCκ° μν μ νλ μκ°μ μ νν μΈμ μΈμ§ μ μ μλ€.
4) Runtime Data Area
JVMμ λ©λͺ¨λ¦¬ μμμΌλ‘ μλ° μ ν리μΌμ΄μ
μ μ€νν λ μ¬μ©λλ λ°μ΄ν°λ€μ μ μ¬νλ μμμ΄λ€.
μ΄ μμμ ν¬κ² μλμ κ°μ΄ λλλ€.

4-1) Method area
- Class area, Method area, Static areaλΌκ³ λΆλ¦°λ€.
- νλ‘κ·Έλ¨ μ€ν μ νμν ν΄λμ€κ° μΈμ€ν΄μ€μ μμ±κ³Ό μκ΄μμ΄ jvm λ©λͺ¨λ¦¬ μμ λ‘λ©λλ€. jvm λ©λͺ¨λ¦¬μ λ‘λ©μ΄ λλ©΄ λ©μλ μμμ ν΄λμ€μ μ 보λ€μ΄ μ¬λΌκ°κ² λλ€.
- Static μμμ μ₯μ μ νλ‘κ·Έλ¨ μ’ λ£ μκΉμ§ ν΄λμ€μ λν μ λ³΄κ° λ©λͺ¨λ¦¬μ μμ£Όνκ³ μκΈ° λλ¬Έμ μ΄λμλ μ¬μ© κ°λ₯νλ€λ κ²μ΄λ€. λ¨μ μ 무λΆλ³νκ² Staticμ λ¨λ°νλ©΄ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ‘μλ¨Ήκ² λλ€.
- λͺ¨λ μ°λ λκ° κ³΅μ νλ μμμ΄λ€.
- λ©μλ μ 보 μ¦ λ©μλ μ΄λ¦, λ¦¬ν΄ νμ , λ§€κ°λ³μ, μ κ·Όμ μ΄μ λ±μ μ 보 μ μ₯
- μμ ν(Constant pool)
1) Typeμμ μ¬μ©λ μμλ₯Ό μ μ₯νλ κ³³
2) λ¬Έμ μμ, νμ , νλ, Method referenceλ μμ νμ μ μ₯
3) final class λ³μμ κ²½μ°λ μμ νμ κ° λ³΅μ¬ - Static λ³μ μ μ₯
4-2) Heap area
- Newμ°μ°μλ₯Ό ν΅ν΄ μμ±ν κ°μ²΄, λλ μΈμ€ν΄μ€μ λ°°μ΄μ μ μ₯νλ 곡κ°μΌλ‘ JVMμ΄ κ΄λ¦¬νλ μμμ΄λ€.
- ν μμμ μμ±λ κ°μ²΄ λ° λ°°μ΄μ μ€ν μμμ λ³μλ λ€λ₯Έ κ°μ²΄μ νλμμ μ°Έμ‘°νλ€.
- λͺ¨λ μ°λ λμμ 곡μ νλ μμμ΄λ€.
- κ°μ²΄κ° λ μ΄μ μ°μ΄μ§ μκ±°λ, μ°Έμ‘°κ° λμ΄μ§ κ°μ²΄μ κ²½μ° Garbage Collectorμ μν΄ μ΄ μμμμ μ κ±°λλ€.
4-3) Stack area
- λ©μλκ° νΈμΆλλ©΄ μνμ νμν λ§νΌμ λ©λͺ¨λ¦¬λ₯Ό μ€νμ ν λΉλ°λλ€
- ν λΉλ λ©λͺ¨λ¦¬λ μ΄ λ©μλκ° μμ μ μννλ λμ λ©μλ μ 보, μ§μλ³μ(λ§€κ°λ³μ ν¬ν¨)λ€κ³Ό μ°μ°μ μ€κ° κ²°κ³Ό λ±μ μ μ₯νλ λ° μ¬μ©λλ€.
- κΈ°λ³Έν λ³μλ μ€ν μμμμ μ§μ κ°μ κ°μ§λ€.
- μ°Έμ‘°ν λ³μλ κ°μ²΄μ ν μμμ κ°μ²΄μ μ£Όμ κ°μ κ°μ§κ³ ν μμμ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ² λλ€.
- Last In First Out (LIFO) κ΅¬μ‘°λ‘ νΈμΆ μ€νμ μ μΌ μμ μλ λ©μλκ° νμ¬ μ€ν μ€μΈ λ©μλμ΄κ³ μλμ μλ λ©μλκ° λ°λ‘ μμ λ©μλλ₯Ό νΈμΆν λ©μλμ΄λ€.
4-4) PC Register
- Thread(μ°λ λ)κ° μμ±λ λλ§λ€ μμ±λλ μμμΌλ‘ Program Counter μ¦, νμ¬ μ°λ λκ° μ€νλλ λΆλΆμ μ£Όμμ λͺ λ Ήμ μ μ₯νκ³ μλ μμμ΄λ€. (*CPUμ λ μ§μ€ν°μ λ€λ¦)
- μ΄κ²μ μ΄μ©ν΄μ μ°λ λλ₯Ό λμκ°λ©΄μ μνν μ μκ² νλ€.
4-5) Native method stack
- μλ° μΈ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν λ©λͺ¨λ¦¬μ΄λ€.
πReference
https://jeong-pro.tistory.com/148
JVM ꡬ쑰μ μλ° λ°νμ λ©λͺ¨λ¦¬ ꡬ쑰 (μλ° μ ν리μΌμ΄μ μ΄ μ€νλ λ JVMμμ μΌμ΄λλ μΌ, κ³Όμ
JVM(Java Virtual Machine) : μλ° κ°μ λ¨Έμ μΌλ‘ μλ° λ°μ΄νΈ μ½λλ₯Ό μ€νν μ μλ 주체λ€. CPUλ μ΄μ체μ (νλ«νΌ)μ μ’ λ₯μ 무κ΄νκ² μ€νμ΄ κ°λ₯νλ€. μ¦, μ΄μ체μ μμμ λμνλ νλ‘μΈμ€λ‘ μ
jeong-pro.tistory.com
https://limkydev.tistory.com/51
[Java] JVM λ©λͺ¨λ¦¬ ꡬ쑰
μ€λμ μλ° JVMμ λ©λͺ¨λ¦¬μ λν΄μ μμ보λλ‘ νκ² λ€. μ¬μ€ JVM λ©λͺ¨λ¦¬μ λν΄μ μ μμμΌν κΉ? μ€μ€λ‘ μλ¬Ένμ λ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ?λΌκ³ λ΅λ³μ νλ€. μκ·λͺ¨νλ‘μ νΈλ κ°λ¨ννλ‘κ·Έλ¨μ
limkydev.tistory.com
https://cafe.naver.com/jjdev/227
[18] μλ° λ©λͺ¨λ¦¬ ꡬ쑰
1. λ©λͺ¨λ¦¬νλ‘κ·Έλ¨μ μ€ννκΈ° μν λ°μ΄ν° λ° λͺ λ Ήμ΄λ₯Ό μ μ₯νλ 곡κ°β» λ©λͺ¨λ¦¬κ΅¬μ‘°λ₯Ό 곡λΆνλ μ΄μ - κ°μ κΈ°λ₯μ νλ‘κ·Έλ¨μ΄λλΌλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λ°λΌ μ±λ₯μ΄ μ’μ°λ¨.- λ©λͺ¨λ¦¬ ...
cafe.naver.com