π’ κ°μ
λ³Έ ν¬μ€ν μ μ μ©κΆ, μκ²½κ· λμ μ΄κ²μ΄ μλ°λ€ μμ κ³Ό λ°±κΈ°μ λμ μλ° κΈ°μ΄ μ€ν°λλ₯Ό follow-up νλ€.
π λͺ©μ°¨
- WORA
- JVM
- JVMμ ꡬ쑰
1. WORA(Write Once Run Anywhere)
λνκ΅ μ κ· μμ μ ν΅ν΄ CμΈμ΄λ₯Ό μκ°ν κ²½νμ΄ μλ€λ©΄, OS(리λ μ€, μλμ°)μ λ°λΌ μμ€ μ½λλ₯Ό λ°λ‘ μμ±νλ μκ³ μ€λ¬μμ ν λ²μ―€μ κ²½νν΄λ³΄μμ κ²μ΄λ€. μ΄λ¬ν λ¨μ μ 보μνκ³ μ λ±μ₯ν μλ°λ Write Once Run Anywhere μ¦, 'ν λ² μμ±νλ©΄ μ΄λμλ μ€νλλ€'λΌλ μ¬λ‘건μ λ΄μΈμ°λλ°, μ΄λ¬ν μν μ΄ κ°λ₯ν μ΄μ λ λ°λ‘ μ΄ν리μΌμ΄μ κ³Ό OS μ¬μ΄μ μ‘΄μ¬νλ JVMμ μλ€.
2. JVM
JVMμ΄λ Java Virtual Machineμ μ€μλ§λ‘, μλ° μ½λ(.java)λ₯Ό μ»΄νμΌνμ¬ λ°μ΄νΈ μ½λ(.class)λ‘ λ³ννκ³ μ΄λ₯Ό OSμ λ§λ κΈ°κ³μ΄λ‘ λ³ννμ¬ μλ° μ ν리μΌμ΄μ μ μ€νμμΌμ£Όλ μν μ νλ€. μ΄λ¬ν μν μ νλ JVM λλΆμ μλ° μ ν리μΌμ΄μ μ μ΄λ€ νλ«νΌμλ μ’ μλμ§ μκ³ μ€νλλ μ₯μ μ κ°μ§λ€. ν¬μ€ν μ μμ±νλ€ κ½€λ ν₯λ―Έλ‘μ΄ κΈμ λ°κ²¬νλλ°, ν λ²μ―€ μ½μ΄λ³΄λ©΄ μ’μ κ² κ°λ€.
"JVMμ΄λ 무μμΈκ°" μλ° κ°μ λ¨Έμ μ΄ν΄νκΈ°
μλ° κ°μ λ¨Έμ (Java Virtual Machine, JVM)μ μμ€ν λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ©΄μ μλ° κΈ°λ° μ ν리μΌμ΄μ μ μν΄ μ΄μ κ°λ₯ν μ€ν ν
www.itworld.co.kr
3. JVMμ ꡬ쑰

3-1. ν΄λμ€ λ‘λ (Class Loader)
μ»΄νμΌ λ ν΄λμ€ νμΌ(.class)μ μ½μ΄ λ°νμ μ JVMμ λ‘λνλ©°, λ‘λ, λ§ν¬, μ΄κΈ°ν 3λ¨κ³λ₯Ό κ±°μΉλ€.
- λ‘λ(Loading) : ν΄λμ€ νμΌμ νμν μμ μ λμ μΌλ‘ JVM λ©λͺ¨λ¦¬μ λ‘λνλ€.
- λ§ν¬(Linking) : ν΄λμ€ νμΌμ μ¬μ©νκΈ° μν΄ κ²μ¦νλ€.
- μ΄κΈ°ν(Initialization) : ν΄λμ€ λ³μλ€μ μ μ ν κ°μΌλ‘ μ΄κΈ°ννλ€.
3-2. μ€ν μμ§ (Execution Engine)
ν΄λμ€ λ‘λ(Class Loader)μ μν΄ JVMμ λ°νμ λ°μ΄ν° μμ(Runtime Data Area)μ λ‘λλ λ°μ΄νΈμ½λ(.class)λ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄ μ€ννλ€. μ΄ κ³Όμ μμ μ€ν μμ§μ μΈν°ν리ν°μ JIT μ»΄νμΌλ¬ λ κ°μ§ λ°©μμ νΌν©νμ¬ μ¬μ©νλ€.
- μΈν°ν리ν°(Interpreter) : λ°μ΄νΈ μ½λ λͺ λ Ήμ΄λ₯Ό ν μ€μ© μ½μ΄ ν΄μνκ³ μ€ννλ€. μ»΄νμΌ λ¨κ³λ₯Ό κ±°μΉμ§ μκΈ° λλ¬Έμ μ»΄νμΌ μκ°μ λ¨μΆν μ μλ€λ μ₯μ μ΄ μμΌλ, κ°μ λ©μλλ₯Ό μ¬λ¬ λ² νΈμΆν κ²½μ°, λ§€λ² ν΄μνκ³ μ€ννλ―λ‘ μλκ° λ리λ€.
- JIT μ»΄νμΌλ¬(Just-In-Time Compiler) : μΈν°ν리ν°μ λ¨μ μ 보μνκΈ° μν΄ λμ λ λ°©μμΌλ‘, λ°μ΄νΈμ½λλ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λ(Native Code)λ‘ λ³ννκ³ , μ΄λ₯Ό μΊμ±ν΄ λμλ€κ° μ΄ν λ€μ΄ν°λΈ μ½λλ₯Ό μ§μ μ€ννλ λ°©μμ΄λ€.
- κ°λΉμ§ 컬λ ν°(Garbage Collector) : λ μ΄μ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ νμν΄ μ£Όλ μν μ νλ€.
3-3. λ°νμ λ°μ΄ν° μμ(Runtime Data Area)

JVMμ΄ μλ° νλ‘κ·Έλ¨μ μννκΈ° μν΄ OSλ‘λΆν° λ³λλ‘ ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°μ λ§νλ€. ν¬κ² 5κ°μ§ μμμΌλ‘ λλλ€.
- λ©μλ μμ(Method Area) : JVMμ΄ μμλ λ μμ±λλ 곡κ°μΌλ‘ λ°μ΄νΈ μ½λ(.class)λ₯Ό μ²μ λ©λͺ¨λ¦¬μ μ¬λ¦΄ λ μ΄κΈ°νλλ λμμ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ΄λ€. ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ, static λ³μ λ±μ λ°μ΄νΈ μ½λλ₯Ό 보κ΄νλ©°, λͺ¨λ μ°λ λκ° κ³΅μ νλ μμμ΄κΈ°λ νλ€.
- ν μμ(Heap Area) : λ©μλ μμκ³Ό ν¨κ» λͺ¨λ μ°λ λκ° κ³΅μ νλ©°, new ν€μλλ‘ μμ±λ κ°μ²΄μ λ°°μ΄μ΄ μ μ₯λλ 곡κ°μ΄λ€. μ£ΌκΈ°μ μΌλ‘ κ°λΉμ§ 컬λ ν°κ° μ κ±°νλ€.
- PC λ μ§μ€ν°(PC Register) : μ°λ λκ° μμ±λ λλ§λ€ μμ±λλ μμμΌλ‘, νμ¬ μ€νλλ μ°λ λμ μ£Όμμ λͺ λ Ήμ μ μ₯νλ€.
- μ€ν μμ(Stack Area) : μ§μ λ³μ, νλΌλ―Έν°, λ¦¬ν΄ κ° λ± μμμ μΌλ‘ μ¬μ©λλ λ³μλ μ 보λ€μ΄ μ μ₯λλ μμμ΄λ€.
- λ€μ΄ν°λΈ λ©μλ μ€ν μμ(Native Method Stack) : λ°μ΄νΈ μ½λκ° μλ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ΄λ€. λν μλ° μ΄μΈμ μΈμ΄(C, C++ λ±)λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μ€ννκΈ° μν 곡κ°μ΄κΈ°λ νλ€. μ€ν μμ§μ JIT μ»΄νμΌλ¬μ μν΄ λ³νλ λ€μ΄ν°λΈ μ½λκ° μ΄ μμμμ μ€νλλ€κ³ 보면 λλ€.
μ°Έκ³
- https://code-lab1.tistory.com/92
- https://coding-factory.tistory.com/828
'DEV > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
chapter01. μλ° μμνκΈ° (0) | 2023.01.03 |
---|