κ°μ
μλ°λ νλ«νΌ λ 립μ μΈ νλ‘κ·Έλλ° μΈμ΄λ‘μ, JVM(Java Virtual Machine)μ ν΅ν΄ λ€μν μ΄μ체μ μμ λμΌνκ² μ€νλ μ μμ΅λλ€. JVMμ μλ° μ ν리μΌμ΄μ μ μ€νμ κ΄λ¦¬νλ©°, μ΄λ₯Ό μν΄ μ¬λ¬ κ°μ§ λ©λͺ¨λ¦¬ μμμ μ¬μ©ν©λλ€. μ΄ λ©λͺ¨λ¦¬ μμλ€μ μλ° νλ‘κ·Έλ¨μ΄ μ€νλλ λμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΄λ¦¬νλ λ° μ€μν μν μ ν©λλ€.
μλ° λ©λͺ¨λ¦¬ λͺ¨λΈ(Java Memory Model, JMM)μ μ΄λ¬ν λ©λͺ¨λ¦¬ μμμ ꡬ쑰μ λμ λ°©μμ μ μνμ¬, μλ° νλ‘κ·Έλ¨μ΄ μΌκ΄μ± μκ³ ν¨μ¨μ μΌλ‘ μ€νλ μ μλλ‘ ν©λλ€.
JVM λ°νμ λ°μ΄ν° μμ(Runtime Data Area)μ μλ° μ ν리μΌμ΄μ μ΄ μ€νλλ λμ μ¬μ©λλ μ¬λ¬ λ©λͺ¨λ¦¬ μμμΌλ‘ ꡬμ±λ©λλ€. μ΄λ€ κ°κ°μ μμμ νΉμ ν μν μ λ΄λΉνλ©°, νλ‘κ·Έλ¨μ μν, λ©μλ νΈμΆ, κ°μ²΄ μμ± λ° μ°λ λ κ°μ λ°μ΄ν° 곡μ λ±μ κ΄λ¦¬ν©λλ€. JVM λ°νμ λ°μ΄ν° μμμ ν¬κ² λ€μκ³Ό κ°μ κ΅¬μ± μμλ‘ λλ©λλ€
μΌλμ ν ν¬ μ€μΏ¨ κ·Έλ£Ήμ€ν°λ λ°νμμ μ κ° λ°νν λ΄μ©μ λ°μ·νμ¬ λ€λ¬μ΄ 보μμ΅λλ€.
- λ©μλ μμ(Method Area): ν΄λμ€, λ©μλ, νλ μ 보μ μμ νμ μ μ₯ν©λλ€.
- ν μμ(Heap): κ°μ²΄μ λ°°μ΄μ μ μ₯ν©λλ€.
- μ€ν μμ(Stack): κ° μ€λ λλ§λ€ μμ±λλ©°, λ©μλ νΈμΆ μ νλ μμ μ μ₯ν©λλ€.
- PC λ μ§μ€ν°(Program Counter Register): νμ¬ μ€ν μ€μΈ λͺ λ Ήμ μ£Όμλ₯Ό μ μ₯ν©λλ€.
- λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack): λ€μ΄ν°λΈ λ©μλ νΈμΆμ μ¬μ©λ©λλ€.
λ©μλ μμ(Method Area)
λ©μλ μμ(Method Area)μ JVMμ΄ μμλ λ μμ±λλ 곡κ°μΌλ‘, λ°μ΄νΈ μ½λ(.class)λ₯Ό λ©λͺ¨λ¦¬ 곡κ°μ μ²μ μ¬λ¦΄ λ μ΄κΈ°νλλ λμμ μ μ₯νκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ λλ€. μ΄ μμμ JVMμ΄ λμνλ©΄μ ν΄λμ€κ° λ‘λλ λ μ μ¬λμ΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λ λκΉμ§ μ μ§λ©λλ€. λ©μλ μμ(Method Area)μ Class Areaλ Static Areaλ‘λ λΆλ¦¬λ©°, λͺ¨λ μ°λ λκ° κ³΅μ νλ μμμ λλ€. μ΄ μμμλ λ€μκ³Ό κ°μ μ΄κΈ°ν μ½λ μ 보λ€μ΄ μ μ₯λ©λλ€
- Field Info: λ©€λ² λ³μμ μ΄λ¦, λ°μ΄ν° νμ , μ κ·Ό μ μ΄μμ μ 보
- Method Info: λ©μλ μ΄λ¦, λ°ν νμ , ν¨μ λ§€κ°λ³μ, μ κ·Ό μ μ΄μμ μ 보
- Type Info: ν΄λμ€μΈμ§ μΈν°νμ΄μ€μΈμ§ μ¬λΆ, νμ μ μμ±, μ΄λ¦, μνΌ ν΄λμ€μ μ΄λ¦
λν λ°νμ μμ ν(Runtime Constant Pool): ν΄λμ€ νμΌμ μ μλ μμ ν(Constant Pool)λ λ©μλ μμμ ν¬ν¨λ©λλ€. μ΄λ μμ κ°μ μ μ₯νκ³ λ©μλ νΈμΆ, νλ μ°Έμ‘° λ±μ μννλ λ° μ¬μ©λ©λλ€.
μλ°μμ λ¬Έμμ΄ λ¦¬ν°λ΄μ ν΄λμ€κ° λ‘λλ λ λ©μλ μμμ μμ νμ μ μ₯λ©λλ€. μ΄λ JVMμ΄ λμΌν λ¬Έμμ΄ λ¦¬ν°λ΄μ 곡μ νλλ‘ νμ¬ λ©λͺ¨λ¦¬ μ¬μ©μ μ΅μ ννκΈ° μν΄μμ λλ€.
μμ νμ μ μ₯λ λ¬Έμμ΄ λ¦¬ν°λ΄μ λμΌν κ°μ κ°μ§ λ€λ₯Έ 리ν°λ΄μ΄ λ€μ μμ±λλ©΄, μλ‘ μμ±νμ§ μκ³ μμ νμ μ μ₯λ κΈ°μ‘΄ 리ν°λ΄μ μ°Έμ‘°ν©λλ€.
λ©μλ μμμ μλ° νλ‘κ·Έλ¨ μ€ν μ€ μ€μν μν μ νλ©°, JVMμ΄ ν΄λμ€μ λ©μλλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ μ€νν μ μλλ‘ λμ΅λλ€.
μ£Όμ νΉμ§
- ν΄λμ€ λ‘λ©, λ§ν¬ λ° μ΄κΈ°ν: λ©μλ μμμ JVMμ΄ ν΄λμ€ λ‘λ©, λ§ν¬(Linking), μ΄κΈ°ν(Initialization) λ¨κ³μμ μ¬μ©λ©λλ€. ν΄λμ€ λ‘λλ ν΄λμ€λ₯Ό λ©μλ μμμ λ‘λνκ³ , λ§ν¬ λ¨κ³μμλ λ©μλ μμμ μ λ³΄κ° μ¬μ©λ©λλ€.
- λ°νμ μμ ν(Runtime Constant Pool): ν΄λμ€ νμΌμ μ μλ μμ ν(Constant Pool)λ λ©μλ μμμ ν¬ν¨λ©λλ€. μ΄λ μμ κ°μ μ μ₯νκ³ λ©μλ νΈμΆ, νλ μ°Έμ‘° λ±μ μννλ λ° μ¬μ©λ©λλ€.
- μ°λ λ μμ μ±: λ©μλ μμμ λͺ¨λ μ°λ λκ° κ³΅μ νλ μμμ΄λ―λ‘, μ°λ λ μμ μ±μ κ³ λ €ν΄μΌ ν©λλ€. JVMμ λ΄λΆμ μΌλ‘ μ΄ μμμ 보νΈνκΈ° μν λ©μ»€λμ¦μ κ°μ§κ³ μμ΅λλ€.
ν μμ (Heap Area)
ν μμμ λ©μλ μμκ³Ό ν¨κ» λͺ¨λ μ°λ λκ° κ³΅μ νλ©°, JVMμ΄ κ΄λ¦¬νλ νλ‘κ·Έλ¨ μμμ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ λ°νμ μ λμ μΌλ‘ ν λΉνμ¬ μ¬μ©νλ μμμ λλ€. κ°μ²΄μ μΈμ€ν΄μ€ λ³μκ° μ΄ μμμ μ μ₯λ©λλ€.
μ¦, new μ°μ°μλ‘ μμ±λλ κ°μ²΄μ μΈμ€ν΄μ€ λ³μ, λ°°μ΄ νμ λ± μ°Έμ‘° νμ (Reference Type)μ΄ μ μ₯λλ κ³³μ λλ€. λ©μλ μμμ μ μ₯λ ν΄λμ€ μ 보λ§μ κΈ°λ°μΌλ‘ κ°μ²΄κ° ν μμμ μμ±λμ΄ μ μ¬λ©λλ€.
μ μν μ μ ν μμμ μμ±λ κ°μ²΄μ λ°°μ΄μ μ°Έμ‘° νμ (Reference Type)μΌλ‘μ, JVM μ€ν μμμ λ³μλ λ€λ₯Έ κ°μ²΄μ νλμμ μ°Έμ‘°λλ€λ μ μ λλ€. μ¦, νμ μ°Έμ‘° μ£Όμλ μ€νμ΄ κ°κ³ μμΌλ©°, ν΄λΉ κ°μ²΄λ₯Ό ν΅ν΄μλ§ ν μμμ μλ μΈμ€ν΄μ€λ₯Ό νΈλ€λ§ν μ μμ΅λλ€.
ν μμμ μλ° νλ‘κ·Έλ¨μ μ±λ₯κ³Ό λ©λͺ¨λ¦¬ μ¬μ© ν¨μ¨μ±μ ν¬κ² μ’μ°ν©λλ€.
μ£ΌμνΉμ§
- λμ ν λΉ: λ°νμ μ κ°μ²΄μ λ°°μ΄μ΄ λμ μΌλ‘ ν λΉλ©λλ€.
- κ°λΉμ§ 컬λ μ : μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ λ©λͺ¨λ¦¬μμ ν΄μ νλ κ°λΉμ§ 컬λ μ (Garbage Collection)μ΄ μνλ©λλ€.
- μ°κΈ° μλμ ν¨μ¨μ±: ν μμμ λ§μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ΄λ¦¬νκΈ° λλ¬Έμ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° νμν©λλ€.
μ€ν μμ(Stack Area)
μ€ν μμμ int, long, boolean λ± κΈ°λ³Έ μλ£νμ μμ±ν λ μ μ₯νλ 곡κ°μΌλ‘, μμμ μΌλ‘ μ¬μ©λλ λ³μλ μ 보λ€μ΄ μ μ₯λλ μμμ λλ€.
λ©μλ νΈμΆ μλ§λ€ κ°κ°μ μ€ν νλ μ(ν΄λΉ λ©μλλ§μ μν 곡κ°)μ΄ μμ±λ©λλ€. μ΄ μ€ν νλ μμλ νΈμΆλ λ©μλμ λ§€κ°λ³μ, μ§μ λ³μ, λ¦¬ν΄ κ° λ° μ°μ° μ μμ±λλ κ°λ€μ΄ μμλ‘ μ μ₯λ©λλ€. λ©μλ μνμ΄ λλλ©΄ ν΄λΉ λ©μλμ μ€ν νλ μμ μμ λ©λλ€.
μ€ν μμμ κ° μ°λ λλ§λ€ νλμ© μ‘΄μ¬νλ©°, μ°λ λκ° μμλ λ ν λΉλ©λλ€. κ° μ°λ λλ λ 립μ μΈ μ€νμ κ°μ§λ―λ‘, νλμ μ°λ λμμ μ¬μ©νλ λ³μλ λ€λ₯Έ μ°λ λμμ μ κ·Όν μ μμ΅λλ€.
μ£Όμ νΉμ§
- κΈ°λ³Έ μλ£ν μ μ₯: int, long, boolean λ± κΈ°λ³Έ μλ£ν λ³μλ€μ΄ μ μ₯λ©λλ€.
- μ€ν νλ μ: λ©μλ νΈμΆ μλ§λ€ μλ‘μ΄ μ€ν νλ μμ΄ μμ±λλ©°, λ©μλκ° μ’ λ£λλ©΄ ν΄λΉ μ€ν νλ μμ μμ λ©λλ€.
- μ°λ λλ³ ν λΉ: κ° μ°λ λλ λ 립μ μΈ μ€νμ κ°μ§λ©°, μ°λ λκ° μμλ λ ν λΉλ©λλ€.
- λΉ λ₯Έ μ κ·Ό μλ: μ€νμ LIFO(Last In First Out) κ΅¬μ‘°λ‘ λμ΄ μμ΄, λ°μ΄ν°μ μΆκ°μ μ κ±°κ° λ§€μ° λΉ λ¦ λλ€.
- μλ λ©λͺ¨λ¦¬ κ΄λ¦¬: μ€ν νλ μμ λ©μλ νΈμΆκ³Ό ν¨κ» μμ±λκ³ λ©μλ μ’ λ£μ ν¨κ» μμ λλ―λ‘, λͺ μμ μΈ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° νμ μμ΅λλ€.
μ€ν μμμ μλ° νλ‘κ·Έλ¨μ μ€ν μ€ λ©μλ νΈμΆκ³Ό κ΄λ ¨λ λͺ¨λ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ©°, νλ‘κ·Έλ¨μ μ±λ₯μ μ€μν μν₯μ λ―ΈμΉ©λλ€.
PC λ μ§μ€ν° (Program Counter Register)
PC λ μ§μ€ν°λ κ° μ°λ λκ° μμλ λ μμ±λλ©°, νμ¬ μν μ€μΈ JVM λͺ λ Ήμ΄μ μ£Όμλ₯Ό μ μ₯νλ 곡κ°μ λλ€. μ΄ λ μ§μ€ν°λ μ°λ λκ° μ΄λ€ λͺ λ Ήμ΄λ₯Ό μ€νν΄μΌ νλμ§μ λν κΈ°λ‘μ κ°μ§κ³ μμ΄, νλ‘κ·Έλ¨ μ€νμ νλ¦μ μ μ΄ν©λλ€.
μ£ΌμνΉμ§
- μ°λ λ λ 립μ±: κ° μ°λ λλ κ³ μ ν PC λ μ§μ€ν°λ₯Ό κ°μ§λλ€. μ΄λ μ¬λ¬ μ°λ λκ° λμμ μ€νλ λ, κ° μ°λ λκ° μμ μ μ€ν μμΉλ₯Ό λ 립μ μΌλ‘ μΆμ ν μ μλλ‘ ν©λλ€.
- λͺ λ Ήμ΄ μ£Όμ μ μ₯: PC λ μ§μ€ν°λ νμ¬ μ€ν μ€μΈ JVM λͺ λ Ήμ΄μ μ£Όμλ₯Ό μ μ₯νλ©°, λ€μμ μ€νλ λͺ λ Ήμ΄λ₯Ό μ§μ ν©λλ€. μ΄λ νλ‘κ·Έλ¨ μΉ΄μ΄ν°(Program Counter) μν μ μνν©λλ€.
- JVM λͺ λ Ήμ΄ μ μ΄: JVMμ΄ λ°μ΄νΈμ½λλ₯Ό μ€νν λ, PC λ μ§μ€ν°λ νμ¬ λͺ λ Ήμ΄μ λ€μμ μ€νλ λͺ λ Ήμ΄μ μμΉλ₯Ό μΆμ νμ¬ νλ‘κ·Έλ¨ νλ¦μ μ μ΄ν©λλ€.
- λ€μ΄ν°λΈ λ©μλ: λ€μ΄ν°λΈ λ©μλλ₯Ό μ€νν λ, PC λ μ§μ€ν°λ νΉμ κ°μ΄ μ μλμ§ μμ΅λλ€. μ΄λ λ€μ΄ν°λΈ λ©μλκ° JVM λ°μ΄νΈμ½λκ° μλ λ€μ΄ν°λΈ μ½λ(Cλ C++ λ±)λ‘ μμ±λμ΄ μκΈ° λλ¬Έμ λλ€.
PC λ μ§μ€ν°λ μλ° νλ‘κ·Έλ¨μ μ€ν νλ¦μ κ΄λ¦¬νκ³ , μ°λ λκ° μ¬λ°λ₯Έ μμλ‘ λͺ λ Ήμ΄λ₯Ό μ€νν μ μλλ‘ λμμ€λλ€.
λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack)
λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack)μ μλ° μ½λκ° μ»΄νμΌλμ΄ μμ±λλ λ°μ΄νΈμ½λκ° μλ, μ€μ μ€νν μ μλ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ λλ€.
μ΄ μ€νμ μλ° μΈμ μΈμ΄(C, C++, μ΄μ λΈλ¦¬ λ±)λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μ€ννκΈ° μν 곡κ°μ΄κΈ°λ ν©λλ€. λ€μ΄ν°λΈ λ©μλ μ€νμ λ€μ΄ν°λΈ λ©μλ νΈμΆ μ μ¬μ©νλ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ΄λ¦¬νλ©°, μλ° μ ν리μΌμ΄μ μ΄ μ΄μ 체μ λ λ€μ΄ν°λΈ λΌμ΄λΈλ¬λ¦¬μ μνΈμμ©ν μ μκ² ν©λλ€.
μ£Όμ νΉμ§
- λ€μ΄ν°λΈ μ½λ μ€ν: λ€μ΄ν°λΈ λ©μλ μ€νμ C, C++, μ΄μ λΈλ¦¬ λ± μλ° μ΄μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ λ©μλλ₯Ό μ€ννκΈ° μν 곡κ°μ λλ€.
- JNI(Java Native Interface): μλ°λ JNIλ₯Ό ν΅ν΄ λ€μ΄ν°λΈ λ©μλλ₯Ό νΈμΆνλ©°, λ€μ΄ν°λΈ λ©μλ μ€νμ μ΄ κ³Όμ μμ μ¬μ©λ©λλ€.
- μ€λ λλ³ μ€ν: κ° μ€λ λλ κ³ μ ν λ€μ΄ν°λΈ λ©μλ μ€νμ κ°μ§λ©°, μ΄λ λ€μ΄ν°λΈ λ©μλ νΈμΆ μ μ€ν νλ μμ κ΄λ¦¬ν©λλ€.
- JVM ꡬν μμ‘΄μ±: λ€μ΄ν°λΈ λ©μλ μ€νμ ꡬνκ³Ό κ΄λ¦¬ λ°©μμ JVM ꡬν체μ λ°λΌ λ€λ₯Ό μ μμ΅λλ€.
λ€μ΄ν°λΈ λ©μλ μ€νμ μλ° μ ν리μΌμ΄μ μ΄ λ€μ΄ν°λΈ λ©μλλ₯Ό ν¨μ¨μ μΌλ‘ μ€ννκ³ μ΄μ 체μ μ κΈ°λ₯μ νμ©ν μ μλλ‘ μ§μνλ μ€μν κ΅¬μ± μμμ λλ€.
JVMμ΄ μλ° μ ν리μΌμ΄μ μ μ€ννλ λμ μ¬μ©νλ λ€μν λ©λͺ¨λ¦¬ μμ, λ©μλ μμ, ν μμ, μ€ν μμ, PC λ μ§μ€ν°, λ€μ΄ν°λΈ λ©μλ μ€νμ λν΄ μμ보μμ΅λλ€. κ° μμμ κ³ μ ν μν κ³Ό νΉμ§μ κ°μ§κ³ μμΌλ©°, μλ° νλ‘κ·Έλ¨μ ν¨μ¨μ μ΄κ³ μΌκ΄λ μ€νμ μ§μν©λλ€.
μ΄λ¬ν λ©λͺ¨λ¦¬ ꡬ쑰μ λν μ΄ν΄λ μλ° μ ν리μΌμ΄μ κ°λ°κ³Ό μ±λ₯ μ΅μ νμ μμ΄μ λ§€μ° μ€μν©λλ€.
λκΈ