1. μλ° JVM(Java Virtual Machine)μ μν
JVM(Java Virtual Machine)μ μλ° μ ν리μΌμ΄μ μ μ€ννλ νκ²½μ μ 곡νλ κ°μ μ»΄ν¨ν°μ λλ€. μλ° νλ‘κ·Έλ¨μ JVM μμμ λμνλ©°, μ΄μ체μ λ νλμ¨μ΄μ λ 립μ μΌλ‘ μ€νλ μ μκ² ν΄μ€λλ€.
JVMμ λ€μκ³Ό κ°μ μ£Όμν μν λ€μ μνν©λλ€:
- μλ° μ ν리μΌμ΄μ μ€ν: JVMμ μλ° λ°μ΄νΈμ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννκ³ μ€νν©λλ€. μ΄λ μλ° μΈμ΄μ ν° μ₯μ μ€ νλμΈ "Write Once, Run Anywhere"λ₯Ό μ€ννλ μν μ λλ€. μλ° μ ν리μΌμ΄μ μ μ»΄νμΌ μμ κΈ°κ³μ΄λ‘ λ³νλλ κ²μ΄ μλλΌ, λ°μ΄νΈμ½λλ‘ λ³νλμ΄ JVMμμ μ€νλ©λλ€.
- λ©λͺ¨λ¦¬ κ΄λ¦¬: JVMμ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ κ΄λ¦¬ν©λλ€. μ΄λ κ°λ°μκ° λ©λͺ¨λ¦¬λ₯Ό λͺ μμ μΌλ‘ ν λΉνκ±°λ ν΄μ νμ§ μμλ λλ νΈλ¦¬ν¨μ μ 곡ν©λλ€. λν, κ°λΉμ§ 컬λ μ (Garbage Collection) κΈ°λ₯μ ν΅ν΄ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ€μ μλμΌλ‘ μ κ±°νμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§ν©λλ€.
- μμΈ μ²λ¦¬: JVMμ μλ° νλ‘κ·Έλ¨μμ λ°μνλ μμΈ(Exception)λ₯Ό μ²λ¦¬ν©λλ€. μμΈκ° λ°μνλ©΄ JVMμ ν΄λΉ μμΈλ₯Ό μ μ νκ² μ²λ¦¬νκ³ νλ‘κ·Έλ¨μ λΉμ μ μ’ λ£λ₯Ό λ°©μ§ν©λλ€.
- μ€λ λ κ΄λ¦¬: JVMμ λ€μμ λμμ± μ€λ λλ₯Ό κ΄λ¦¬νκ³ μ€μΌμ€λ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ μλ° μ ν리μΌμ΄μ μμ λμμ μ¬λ¬ μμ μ μννκ±°λ λ³λ ¬λ‘ μ²λ¦¬ν μ μμ΅λλ€.
- ν΄λμ€ λ‘λ© λ° bytecode verification: JVMμ μλ° ν΄λμ€ νμΌμ ν΄λμ€λ‘ λ‘λ©νκ³ , bytecodeλ₯Ό κ²μ¦ν©λλ€. μ΄λ₯Ό ν΅ν΄ μλ° μ ν리μΌμ΄μ μμ μ¬μ©λλ ν΄λμ€λ€μ λμ μΌλ‘ λ‘λ©νκ³ μ€νν μ μμ΅λλ€. λν, bytecode verification κ³Όμ μμ 보μμ μΈ μΈ‘λ©΄μμλ ν΄λμ€μ μμ μ±μ κ²μ¬ν©λλ€.
JVMμ λ€μν νλ«νΌμ λν΄ νΈνμ±κ³Ό μ΄μμ±μ μ 곡νλ―λ‘, κ°λ°μλ€μ μλ° μΈμ΄λ₯Ό μ¬μ©νμ¬ λ€μν μ΄μ체μ μ νλμ¨μ΄μμ λμνλ μ ν리μΌμ΄μ μ κ°λ°ν μ μμ΅λλ€. μ΄λ¬ν JVMμ μν κ³Ό κΈ°λ₯μ μλ°μ μΈκΈ°μ μ±κ³΅μ ν¬κ² κΈ°μ¬νμμ΅λλ€.
2. JVM λ΄λΆ ꡬ쑰μ μ€ν κ³Όμ
JVMμ ν¬κ² ν΄λμ€ λ‘λ(Class Loader), μ€ν μμ§(Execution Engine), λ©λͺ¨λ¦¬(λ©λͺ¨λ¦¬ μμ)λ‘ κ΅¬μ±λ©λλ€. μ΄λ€ κ΅¬μ± μμλ μλ° μ ν리μΌμ΄μ μ μ€ννλ λ° νμν μν μ μνν©λλ€.
ν΄λμ€ λ‘λ (Class Loader)
ν΄λμ€ λ‘λλ μλ° ν΄λμ€ νμΌμ JVMμΌλ‘ λ‘λνλ μν μ λ΄λΉν©λλ€. JVMμ λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λ©νμ¬ μ€ννλ νΉμ§μ΄ μκΈ° λλ¬Έμ, ν΄λμ€ λ‘λλ ν΄λμ€ νμΌμ μ°Ύμ λ‘λνκ³ JVMμ΄ μ¬μ©ν μ μλ ννλ‘ λ³νν©λλ€. μ΄λ¬ν ν΄λμ€ λ‘λλ 3κ°μ§ κ³μΈ΅μΌλ‘ ꡬμ±λ©λλ€:
- Bootstrap Class Loader: κ°μ₯ λ¨Όμ μ€νλλ©°, JVMμ κΈ°λ³Έ ν΄λμ€λ€μ λ‘λν©λλ€. C++λ‘ μμ±λμ΄ μμ΄ Java μ½λλ‘ μ§μ μμ ν μ μμ΅λλ€.
- Extension Class Loader: νμ₯ κΈ°λ₯μ μ 곡νλ ν΄λμ€λ€μ λ‘λν©λλ€. 보ν΅
JAVA_HOME/lib/ext
λλ ν 리 νμμ μμΉν ν΄λμ€λ€μ λ‘λν©λλ€. - Application Class Loader: κ°λ°μκ° μμ±ν μ ν리μΌμ΄μ μμ μ¬μ©νλ ν΄λμ€λ€μ λ‘λν©λλ€. μ ν리μΌμ΄μ ν΄λμ€ ν¨μ€μ ν¬ν¨λ ν΄λμ€λ€μ λ‘λν©λλ€.
μ€ν μμ§ (Execution Engine)
μ€ν μμ§μ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ‘λλ ν΄λμ€ νμΌμ κΈ°κ³μ΄λ‘ λ³ννκ³ μ€νν©λλ€. JVMμλ λ κ°μ§ μ£Όμν μ€ν μμ§μ΄ μμ΅λλ€:
- μΈν°νλ¦¬ν° (Interpreter): ν΄λμ€ νμΌμ ν μ€μ© ν΄μνμ¬ κΈ°κ³μ΄λ‘ λ³ννκ³ μ€νν©λλ€. μ€ν μλλ λ리μ§λ§, λ°λ‘ μ€νν μ μκΈ° λλ¬Έμ μ΄κΈ° λ‘λ© μκ°μ΄ 짧μ΅λλ€.
- JIT μ»΄νμΌλ¬ (Just-In-Time Compiler): μΈν°ν리ν°κ° λ°μ΄νΈμ½λλ₯Ό ν΄μνλ©΄, JIT μ»΄νμΌλ¬κ° ν΄λΉ μ½λλ₯Ό λΆμνμ¬ κΈ°κ³μ΄λ‘ μ§μ λ³νν©λλ€. μ΄λ κ² λ³νλ μ½λλ μΊμμ μ μ₯λμ΄ λ€μμ λΉμ·ν μ½λκ° μ€νλ λ μ¬μ¬μ©λ μ μμΌλ©°, μ΄λ‘ μΈν΄ μ€ν μλκ° ν₯μλ©λλ€.
λ©λͺ¨λ¦¬ (λ©λͺ¨λ¦¬ μμ)
JVMμ μλ° μ ν리μΌμ΄μ μ μ€ννκΈ° μν΄ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€. λ©λͺ¨λ¦¬λ ν¬κ² μ¬λ¬ μμμΌλ‘ λλλ©°, κ° μμμ νΉμ μ©λλ‘ μ¬μ©λ©λλ€:
- λ©μλ μμ (Method Area): ν΄λμ€μ λ©νλ°μ΄ν°μ μμκ°λ€μ΄ μ μ₯λλ μμμ λλ€. ν΄λμ€ λ‘λμ μν΄ λ‘λλ ν΄λμ€ νμΌλ€μ λ΄μ©μ΄ μ μ₯λλ©°, 곡μ λλ μμμ λλ€.
- ν (Heap): κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ΄ ν λΉλλ μμμ λλ€. κ°μ₯ ν° λ©λͺ¨λ¦¬ μμμ΄λ©°, κ°μ²΄μ λμ ν λΉκ³Ό κ°λΉμ§ 컬λ μ μ μνν©λλ€.
- μ€λ λ μ€ν (Thread Stack): μ€λ λκ° λ 립μ μΌλ‘ μ€νλ λ κ°κ° λ³λμ μ€νμ΄ ν λΉλλ μμμ λλ€. λ©μλλ₯Ό νΈμΆνλ©΄ μ€ν νλ μμ΄ μμ±λκ³ , λ©μλκ° μ’ λ£λλ©΄ μ€ν νλ μμ΄ ν΄μ λ©λλ€.
- PC λ μ§μ€ν° (Program Counter Register): νμ¬ μ€ν μ€μΈ JVM λͺ λ Ήμ μ£Όμλ₯Ό μ μ₯ν΄ λλ μμμ λλ€.
- λ€μ΄ν°λΈ λ©μλ μ€ν (Native Method Stack): μλ° μ½λμμ νΈμΆν Native λ©μλλ€μ΄ μ€νλ λ μ€ν νλ μμ μ μ₯νλ μμμ λλ€.
μ€ν κ³Όμ
JVMμ λ€μκ³Ό κ°μ κ³Όμ μ ν΅ν΄ μλ° μ ν리μΌμ΄μ μ μ€νν©λλ€:
- ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ νμν ν΄λμ€ νμΌλ€μ JVMμΌλ‘ λ‘λν©λλ€.
- JVMμ λ©μλ μμμ ν΄λμ€μ λ©νλ°μ΄ν°μ μμκ°λ€μ μ μ₯ν©λλ€.
- ν μμμλ κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ μμ±νμ¬ ν λΉν©λλ€.
- λ©μΈ μ€λ λκ° μμλλ©΄, JVMμ λ©μΈ λ©μλλ₯Ό νΈμΆνκ³ μλ‘μ΄ μ€λ λλ₯Ό μμ±ν©λλ€.
- JVMμ μΈν°ν리ν°λ JIT μ»΄νμΌλ¬λ₯Ό ν΅ν΄ λ°μ΄νΈμ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννμ¬ μ€νν©λλ€.
- μ€ν μ€ λ°μν μμΈλ JVMμ μμΈ μ²λ¦¬ λ©μ»€λμ¦μ μν΄ μ μ νκ² μ²λ¦¬λ©λλ€.
- νμμ λ°λΌ κ°λΉμ§ 컬λ μ μ μννμ¬ λ μ΄μ νμνμ§ μμ κ°μ²΄λ€μ λ©λͺ¨λ¦¬μμ μ κ±°ν©λλ€.
- νλ‘κ·Έλ¨μ΄ μ’ λ£λκ±°λ JVMμ΄ κ°μ λ‘ μ’ λ£λλ©΄, ν λΉλ λ©λͺ¨λ¦¬μ 리μμ€λ€μ΄ ν΄μ λ©λλ€.
μ΄λ¬ν JVMμ λ΄λΆ ꡬ쑰μ μ€ν κ³Όμ μ μ΄ν΄νλ κ²μ μλ° μ ν리μΌμ΄μ μ λμ μ리λ₯Ό μ΄ν΄νλ λ° μ€μν©λλ€.
3. JVM λ©λͺ¨λ¦¬ ꡬ쑰μ λ©λͺ¨λ¦¬ μμ
JVMμ μλ° μ ν리μΌμ΄μ μ μ€ννκΈ° μν΄ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€. λ©λͺ¨λ¦¬λ ν¬κ² μ¬λ¬ μμμΌλ‘ λλλ©°, κ° μμμ νΉμ μ©λλ‘ μ¬μ©λ©λλ€. JVMμ λ©λͺ¨λ¦¬ ꡬ쑰μ λ©λͺ¨λ¦¬ μμμ λν΄ μμΈν μμλ³΄κ² μ΅λλ€.
λ©λͺ¨λ¦¬ ꡬ쑰
JVMμ λ©λͺ¨λ¦¬ ꡬ쑰λ λ€μκ³Ό κ°μ΄ ν¬κ² λλ©λλ€:
- λ©μλ μμ (Method Area)
- ν (Heap)
- μ€λ λ μ€ν (Thread Stack)
- PC λ μ§μ€ν° (Program Counter Register)
- λ€μ΄ν°λΈ λ©μλ μ€ν (Native Method Stack)
λ©μλ μμ (Method Area)
λ©μλ μμμ ν΄λμ€μ λ©νλ°μ΄ν°μ μμκ°λ€μ μ μ₯νλ μμμ λλ€. ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ‘λλ ν΄λμ€ νμΌλ€μ λ΄μ©μ΄ μ μ₯λ©λλ€. λ©μλ μμμ JVMμμ 곡μ λλ μμμ΄λ―λ‘, λͺ¨λ μ€λ λκ° κ³΅μ ν μ μμ΅λλ€. λ©μλ μμμλ λ€μκ³Ό κ°μ μ 보λ€μ΄ μ μ₯λ©λλ€:
- ν΄λμ€ μ΄λ¦, λΆλͺ¨ ν΄λμ€ μ΄λ¦, νλ μ 보, λ©μλ μ 보 λ±μ λ©νλ°μ΄ν°
- λ©μλ μ½λ (λ°μ΄νΈμ½λ)
- μμ ν (Constant Pool): ν΄λμ€ νμΌμ ν¬ν¨λ μ¬μ©λλ μμ κ°λ€
ν (Heap)
νμ κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ΄ μ μ₯λλ μμμ λλ€. κ°μ₯ ν° λ©λͺ¨λ¦¬ μμμ΄λ©°, JVMμμ κ°λΉμ§ 컬λ μ μ΄ μ΄λ£¨μ΄μ§λ μμμ΄κΈ°λ ν©λλ€. νμ λͺ¨λ μ€λ λμ 곡μ λλ μμμ λλ€. νμ λ κ°μ§ μ£Όμν μν μ μνν©λλ€:
- κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ ν λΉ:
new
ν€μλλ₯Ό ν΅ν΄ κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ΄ ν λ΄μ ν λΉλ©λλ€. - κ°λΉμ§ 컬λ μ : λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ€μ κ°λΉμ§ 컬λ μ μ΄λΌλ κ³Όμ μ ν΅ν΄ μλμΌλ‘ μ κ±°λ©λλ€.
μ€λ λ μ€ν (Thread Stack)
μ€λ λ μ€νμ μ€λ λκ° λ 립μ μΌλ‘ μ€νλ λ κ°κ° λ³λμ μ€νμ΄ ν λΉλλ μμμ λλ€. λ©μλλ₯Ό νΈμΆνλ©΄ ν΄λΉ λ©μλμ μ€ν νλ μμ΄ μ€λ λ μ€νμ μμ±λκ³ , λ©μλκ° μ’ λ£λλ©΄ ν΄λΉ μ€ν νλ μμ΄ μ€λ λ μ€νμμ μ κ±°λ©λλ€. μ€λ λ μ€νμ κ° μ€λ λμκ² κ³ μ ν λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νμ¬ μ€λ λ λ³λ‘ λ 립μ μΈ μ€ν νλ¦μ μ μ§ν μ μλλ‘ ν©λλ€.
PC λ μ§μ€ν° (Program Counter Register)
PC λ μ§μ€ν°λ νμ¬ μ€ν μ€μΈ JVM λͺ λ Ήμ μ£Όμλ₯Ό μ μ₯ν΄ λλ μμμ λλ€. μ΄ μμμ μ€λ λ λ³λ‘ κ°κ° μ‘΄μ¬νλ©°, μ€λ λκ° μ€ν μ€μΈ JVM λͺ λ Ήμ μ£Όμλ₯Ό κΈ°λ‘νμ¬ λ€μμ μ΄λ€ λͺ λ Ήμ μ€νν μ§λ₯Ό κ²°μ ν©λλ€.
λ€μ΄ν°λΈ λ©μλ μ€ν (Native Method Stack)
λ€μ΄ν°λΈ λ©μλ μ€νμ μλ° μ½λμμ νΈμΆν Native λ©μλλ€μ΄ μ€νλ λ μ€ν νλ μμ μ μ₯νλ μμμ λλ€. λ€μ΄ν°λΈ λ©μλλ μλ°κ° μλ λ€λ₯Έ μΈμ΄λ‘ μμ±λ λ©μλλ₯Ό νΈμΆνλ κ²μ λ§νλ©°, Cλ C++κ³Ό κ°μ μΈμ΄λ‘ μμ±λ λ©μλλ€μ λλ€.
μ΄λ¬ν JVMμ λ©λͺ¨λ¦¬ ꡬ쑰μ λ©λͺ¨λ¦¬ μμμ μλ° μ ν리μΌμ΄μ μ μ€ν λμ κ°μ²΄μ λ°μ΄ν°μ ν λΉκ³Ό κ΄λ¦¬, λ©μλμ νΈμΆ λ° μ€ν νλ¦ λ±μ λ΄λΉνλ μ€μν μν μ μνν©λλ€. λ©λͺ¨λ¦¬ μμ λ΄μ κ° μμμ μλ° μ ν리μΌμ΄μ μ μ€νμ νμν λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ ν λΉνκ³ κ΄λ¦¬νλ λ° μ€μν μν μ ν©λλ€.
4. JVM κ°λΉμ§ 컬λ μ (Garbage Collection)κ³Ό λ©λͺ¨λ¦¬ κ΄λ¦¬
JVMμ κ°λΉμ§ 컬λ μ (Garbage Collection)μ ν΅ν΄ λμ μΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμμ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ€μ μλμΌλ‘ μ κ±°νμ¬ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€. κ°λΉμ§ 컬λ μ μ λ©λͺ¨λ¦¬ λμ(memory leak)μ κ°μ λ¬Έμ λ₯Ό λ°©μ§νκ³ , κ°λ°μκ° λͺ μμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν νμ μμ΄ μ ν리μΌμ΄μ μ€ν μ€μ μμμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€.
κ°λΉμ§ 컬λ μ μ λμ μ리
κ°λΉμ§ 컬λ μ μ λ€μκ³Ό κ°μ μλ¦¬λ‘ λμν©λλ€:
- Reachability Analysis (λλ¬μ± λΆμ): κ°λΉμ§ 컬λ μ μ λλ¬ κ°λ₯ν κ°μ²΄(reachable object)μ λλ¬ λΆκ°λ₯ν κ°μ²΄(unreachable object)λ₯Ό ꡬλΆν©λλ€. λλ¬ κ°λ₯ν κ°μ²΄λ μ΅μν νλ μ΄μμ μ°Έμ‘°(reference)λ₯Ό κ°μ§κ³ μμ΄ λ€λ₯Έ κ°μ²΄λ μ€ν μ€μΈ μ½λμμ μ κ·Όν μ μλ κ°μ²΄λ₯Ό λ§ν©λλ€.
- Marking (νμ): λλ¬ κ°λ₯ν κ°μ²΄λ€μ νμ(Marked)λκ³ , λλ¬ λΆκ°λ₯ν κ°μ²΄λ€μ νμλμ§ μμ΅λλ€.
- Sweep (μ²μ): νμλμ§ μμ κ°μ²΄λ€μ λ©λͺ¨λ¦¬μμ ν΄μ λκ³ , μ¬μ©λμ§ μλ λ©λͺ¨λ¦¬ 곡κ°μ νμλ©λλ€.
μ°Έμ‘°μ μ’ λ₯
μ°Έμ‘°(reference)λ κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νκ±°λ, μ°Έμ‘°λ₯Ό ν΅ν΄ λ€λ₯Έ κ°μ²΄μ μ κ·Όν μ μλλ‘ νλ κ²μ λλ€. κ°λΉμ§ 컬λ μ μ λ€μκ³Ό κ°μ μ°Έμ‘°μ μ’ λ₯λ₯Ό κ³ λ €ν©λλ€:
- κ°ν μ°Έμ‘° (Strong Reference): μΌλ°μ μΈ μ°Έμ‘°λ‘, κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ νΌλ°μ€ λ³μκ° μμ κ²½μ° ν΄λΉ κ°μ²΄λ κ°ν μ°Έμ‘°λ₯Ό κ°μ§λλ€. JVMμ νμμ κ°μ²΄κ° κ°ν μ°Έμ‘°λ₯Ό κ°μ§κ³ μλ λμμ κ·Έ κ°μ²΄λ₯Ό μκ±°νμ§ μκ³ μ μ§ν©λλ€.
- μννΈ μ°Έμ‘° (Soft Reference): λ©λͺ¨λ¦¬ λΆμ‘± μμλ§ μκ±°λλ μ°Έμ‘°μ λλ€. JVMμ ν λ΄μ λ©λͺ¨λ¦¬κ° λΆμ‘±νλ©΄ κ°λΉμ§ 컬λ μ μλλ₯Ό νμ¬ μννΈ μ°Έμ‘°λ₯Ό κ°μ§ κ°μ²΄λ€μ μ κ±°ν©λλ€.
- μ½ν μ°Έμ‘° (Weak Reference): μ΄λ€ κ°μ²΄μ λν μ½ν μ°Έμ‘°λ ν΄λΉ κ°μ²΄λ₯Ό μκ±°νλ λ° ν° μν₯μ μ£Όμ§ μμ΅λλ€. JVMμ κ°λΉμ§ 컬λ μ μ μν΄ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό μ½ν μ°Έμ‘°λ‘ κ°μ§λ κ°μ²΄λ₯Ό μ¦μ μ κ±°ν©λλ€.
- ν¬ν μ°Έμ‘° (Phantom Reference): κ°μ²΄κ° finalize() λ©μλ νΈμΆ ν νμλκΈ° μ§μ μ μ¬μ©λ©λλ€. ν¬ν μ°Έμ‘°λ₯Ό ν΅ν΄ κ°ν μ°Έμ‘° νμ© μμ΄ κ°μ²΄μ ν΄μ μμ μ μΆμ νκ³ λ©λͺ¨λ¦¬ κ΄λ¦¬μμκ² μ리λ μ©λλ‘ μ¬μ©λ©λλ€.
κ°λΉμ§ 컬λ μ μ μ₯λ¨μ
κ°λΉμ§ 컬λ μ μ μλμΌλ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό λμ ν΄ μ€μΌλ‘μ¨ κ°λ°μκ° λͺ μμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νλ μμ μ μ€μ¬μ£Όλ μ₯μ μ΄ μμ΅λλ€. λν κ°λΉμ§ 컬λ μ μ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νμ¬ μ ν리μΌμ΄μ μ μμ μ±μ ν₯μμν΅λλ€. κ·Έλ¬λ κ°λΉμ§ 컬λ μ μ λ€μκ³Ό κ°μ λ¨μ λ κ°μ§κ³ μμ΅λλ€:
- μ€νμκ° μ€λ²ν€λ: κ°λΉμ§ 컬λ μ μ μ€ν μ€μΈ μ ν리μΌμ΄μ μ μ±λ₯μ μ½κ° μ νμν¬ μ μμΌλ©°, κ°λμ© κΈ΄ μΌμ μ μ§(stop-the-world)λ₯Ό λ°μμν΅λλ€.
- μμΈ‘ λΆκ°λ₯ν λμ: κ°λΉμ§ 컬λ μ μ JVMμ΄ μλμΌλ‘ μννλ μμ μ΄κΈ° λλ¬Έμ, κ°λ°μκ° μ§μ μ μ΄ν μ μμ΅λλ€. λ°λΌμ κ°λΉμ§ 컬λ μ μ νμ΄λ°κ³Ό μμ λμ μμΈ‘νκΈ° μ΄λ €μΈ μ μμ΅λλ€.
κ°λΉμ§ 컬λ μ μ νλ
κ°λΉμ§ 컬λ μ μ λμμ μ‘°μ νμ¬ μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ νν μ μμ΅λλ€. μΌλ°μ μΈ κ°λΉμ§ 컬λ μ μ νλ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€:
5. JVMμ μ±λ₯ ν₯μμ μν νλ λ°©λ²
JVMμ μ±λ₯μ ν₯μμν€κΈ° μν΄μλ λ€μν νλ λ°©λ²μ μ μ©ν μ μμ΅λλ€. μ΄λ¬ν νλ λ°©λ²μ JVMμ λ©λͺ¨λ¦¬ κ΄λ¦¬, κ°λΉμ§ 컬λ μ , JIT μ»΄νμΌλ¬ λ± λ€μν μμμ κ±Έμ³ μ μ©λ μ μμ΅λλ€. μλμμλ μΌλ°μ μΌλ‘ μ¬μ©λλ JVMμ μ±λ₯ ν₯μμ μν νλ λ°©λ²μ μ€λͺ νκ² μ΅λλ€.
λ©λͺ¨λ¦¬ κ΄λ¦¬ νλ
- ν ν¬κΈ° μ‘°μ : ν(heap)μ JVMμμ κ°μ²΄ μΈμ€ν΄μ€μ λ°°μ΄μ΄ ν λΉλλ λ©λͺ¨λ¦¬ 곡κ°μ λλ€. ν ν¬κΈ°λ μ ν리μΌμ΄μ μ λ©λͺ¨λ¦¬ μ¬μ©λμ λ§κ² μ μ νκ² μ‘°μ ν΄μΌ ν©λλ€. ν ν¬κΈ°λ₯Ό μκ² μ€μ νλ©΄ κ°λΉμ§ 컬λ μ μ νμκ° μ¦κ°νμ¬ μ€ν μλκ° λλ €μ§ μ μκ³ , λ무 ν¬κ² μ€μ νλ©΄ λ©λͺ¨λ¦¬ λλΉκ° λ°μν μ μμ΅λλ€.
- κ°λΉμ§ 컬λ μ νλ: κ°λΉμ§ 컬λ μ μ λ©λͺ¨λ¦¬μμ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ€μ μ 리νλ μμ μ λλ€. κ°λΉμ§ 컬λ μ μ ν¨κ³Όμ μΌλ‘ μ€ννκΈ° μν΄μλ κ° μμμ λν κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦κ³Ό μ€λ λμ λμμ μ΅μ νν νμκ° μμ΅λλ€. κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ μ’ λ₯, κ°λΉμ§ 컬λ μ μ€λ λμ μ°μ μμ λ±μ μ‘°μ νμ¬ νλν μ μμ΅λλ€.
JIT μ»΄νμΌλ¬ νλ
- HotSpot μ΅μ
μ€μ : HotSpotμ JVMμ κΈ°λ³Έμ μΈ JIT μ»΄νμΌλ¬λ‘ μ±λ₯ ν₯μμ μν λ€μν μ΅μ
μ μ 곡ν©λλ€. μλ₯Ό λ€μ΄,
-client
μ΅μ μ λΉ λ₯Έ μμ μκ°κ³Ό μμ λ©λͺ¨λ¦¬ νλκ·Έλ₯Ό μ§μνλ©°,-server
μ΅μ μ μλ΅ μκ°κ³Ό μ²λ¦¬λμ μ΅μ ννλ λ° μ¬μ©λ©λλ€. μ΄μΈμλ μΈλΌμ΄λ, μ½λ μ΅μ ν, μ€λ λ λ³λ ¬ν λ±μ κ΄λ ¨λ λ€μν μ΅μ μ μ€μ ν μ μμ΅λλ€. - μ»΄νμΌ μ΅μ μ€μ : JIT μ»΄νμΌλ¬λ μ€ν μμ μλ° λ°μ΄νΈμ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννλ μν μ μνν©λλ€. μ»΄νμΌλ¬μ μ΅μ μ μ€μ νμ¬ μ΅μ ν μμ€, μΈλΌμ΄λ μ μ± , μ½λ μΊμ ν¬κΈ° λ±μ μ‘°μ ν μ μμ΅λλ€. μ΄λ¬ν μ€μ μ μ ν리μΌμ΄μ μ νΉμ±μ λ§κ² μ‘°μ ν΄μΌ νλ©°, μ€νκ³Ό μ±λ₯ ν μ€νΈλ₯Ό ν΅ν΄ νλν μ μμ΅λλ€.
GC λ‘κΉ λ° λΆμ
- GC λ‘κ·Έ νμ±ν: κ°λΉμ§ 컬λ μ λ‘κ·Έλ JVMμ΄ κ°λΉμ§ 컬λ μ μμ μ μννλ λ΄μ©μ κΈ°λ‘ν©λλ€. λ‘κ·Έλ₯Ό νμ±ννμ¬ κ°λΉμ§ 컬λ μ μ λμμ λͺ¨λν°λ§νκ³ λΆμν μ μμ΅λλ€. λ‘κ·Έλ₯Ό ν΅ν΄ κ°λΉμ§ 컬λ μ μ νμ, μκ°, λ©λͺ¨λ¦¬ μ¬μ©λ λ±μ νμΈν μ μμΌλ©°, μ΄ μ 보λ₯Ό κΈ°λ°μΌλ‘ κ°λΉμ§ 컬λ μ μ ν¨μ¨μ±κ³Ό μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- GC λ‘κ·Έ λΆμ: GC λ‘κ·Έλ λ€μν λꡬλ₯Ό μ¬μ©νμ¬ λΆμν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λΉμ§ 컬λ μ μμ μ μΈλΆ μ 보, λ©λͺ¨λ¦¬ μ¬μ©λ, κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ μ ν λ° μν μκ° λ±μ λΆμν μ μμ΅λλ€. μ΄λ¬ν λΆμμ ν΅ν΄ μ ν리μΌμ΄μ μ λ©λͺ¨λ¦¬ μ¬μ© ν¨ν΄μ μ΄ν΄νκ³ , κ°λΉμ§ 컬λ μ μ ν¨μ¨μ±μ κ°μ ν μ μμ΅λλ€.
JVMμ μ±λ₯μ ν₯μμν€κΈ° μν΄μλ μ¬λ¬ κ°μ§ νλ μ΅μ κ³Ό μ κ·Ό λ°©λ²μ κ³ λ €ν΄μΌ ν©λλ€. λ°λ³΅μ μΈ μ€νκ³Ό μ±λ₯ ν μ€νΈλ₯Ό ν΅ν΄ μ΅μ μ μ€μ κ°μ μ°Ύκ³ , μ ν리μΌμ΄μ μ νΉμ±κ³Ό μꡬμ¬νμ λ§κ² νλ μμ μ μνν΄μΌ ν©λλ€. μ΄λ₯Ό ν΅ν΄ JVMμ μ±λ₯μ μ΅λν λμ΄μ¬λ¦΄ μ μμ΅λλ€.
λκΈ