JAVAλΌλ μΈμ΄λ₯Ό ν΅ν΄ μ½λ©μ νκ³ μλ μ¬λμΌλ‘μ JAVAμ κ°λ¨ν νμλ°°κ²½ 그리κ³
JAVAμ μμκ³Ό λμ΄λΌκ³ ν μ μλ JVMμ ν λ² μ§κ³ λμ΄κ°λ €κ³ ν΄μ
μ°μ JAVAμ νμλ°°κ²½μ μ’ μκ³ κ°λ©΄ μ΄ν΄νκΈ° λ μ’μ λ― μΆμ΄μ λ¨Όμ μ λ¦¬ν΄ λ΄ λλ€
λͺ©μ°¨λ λ€μκ³Ό κ°μ΅λλ€
1. JAVA νμ λ°°κ²½
2. μλ° μ½λ(JAVA Code) μ€ν κ³Όμ
3. JVM λμμ리 λ° κΈ°λ³Έκ°λ
3-1. ν΄λμ€ λ‘λ (Class Loader)
3-2. λ°νμ λ°μ΄ν° μμ(Runtime Data Area)
3-3. μ€ν μμ§(Execution Engine)
JAVA νμλ°°κ²½
JAVAλ μ¬ λ§μ΄ν¬λ‘μμ€ν μ¦μ μ μμ€ κ³ μ¬λ§μ΄λΌλ μ¬λκ³Ό λ€λ₯Έ μ°κ΅¬μλ€μ΄ κ°λ°ν νλ‘κ·Έλλ° μΈμ΄μμ
1991λ κ·Έλ¦° νλ‘μ νΈ(Green Project)λΌλ μ΄λ¦μΌλ‘ μμν΄ 1995λ μ λ°νκ° λ¬λλ°μ
μ²μμλ κ°μ μ ν λ΄μ νμ¬ν΄ λμνλ νλ‘κ·Έλ¨μ μν΄ κ°λ°νλλ° μμ΄λ¬λνκ²λ νμ¬λ μΉ μ΄ν리μΌμ΄μ κ°λ°μ κ°μ₯ λ§μ΄ μ¬μ©νλ μΈμ΄ μ€μ νλκ° λμ΄μμ£ (λ¬Όλ‘ λͺ¨λ°μΌ κΈ°κΈ°μ© μννΈμ¨μ΄ κ°λ°μλ λ리 μ¬μ©λκ³ μꡬμ)
μλ¬Έμ μνλ©΄ μ μμ€κ³ μ¬λ§μ΄λΌλ μ¬λμ΄ κ°μ μ ν λ΄μ νμ¬ν΄ λμνλ νλ‘κ·Έλ¨μ κ°λ°νλ €κ³ νλλ° κ·Έ λΉμμλ μ λμ€ κΈ°λ°μ λ°°κ²½μ κ°μ§κ³ μμκΈ° λλ¬Έμ μ¬μ©νλ νλ‘κ·Έλλ° μΈμ΄ C/C++μ νΉμ±μ μ¬λ¬ νλμ¨μ΄λ₯Ό 컀λ²νκΈ°μλ κ°μ κΈ°λ₯μ μμ€λ₯Ό κ° νλμ¨μ΄μ λ§κ² μμ±ν΄μΌνλ λ²κ±°λ‘μμ΄ μμ΄μ JAVAλ₯Ό κ°λ°νκ² λμλ€κ³ ν΄μ
JAVAμ κ°μ₯ ν° νΉμ§ μ€ νλκ° λ°λ‘ μ΄λ νλ«νΌ, κ·Έλ¬λκΉ μ΄λ νλμ¨μ΄(CPU)λ, μ΄λ μ΄μ체μ (OS)μ΄λ μκ΄μμ΄ μ»΄νμΌλ μ½λ(λ°μ΄νΈμ½λ)κ° νλ«νΌ λ 립μ μ΄λΌλ μ μ΄μμ.
λ€μ λ§ν΄μ μ΄λ νλ«νΌμ΄λ μμ±ν μμ€λ₯Ό λ³κ²½ν νμ μμ΄ λ€ μ€νμν¬ μ μλ€λ κ²μ΄μ£ κ·Έλ¦¬κ³ λ°λ‘ μ΄ μ μ΄ μΉ μ΄ν리μΌμ΄μ μ νΉμ±κ³Ό λ§μ λ¨μ΄μ Έ νλ°μ μΈ μΈκΈ°μ ν¨κ» νμ¬ μΉ μ΄ν리μΌμ΄μ κ°λ°μ κ°μ₯ λ§μ΄ μ¬μ©λλ μΈμ΄ μ€μ νλκ° λμμ΅λλ€
μ΄λ¬ν νΉμ§μ ꡬννκΈ° μν΄μλ λ°λ‘ μ€λμ μ£Όμ μΈ JVM(JAVA Virtual Machine)μ΄ νμν©λλ€ JVM, μλ° κ°μ λ¨Έμ μ λ¨μνκ² λ§νλ©΄ μ»΄νμΌλ μ½λ(λ°μ΄νΈμ½λ)λ₯Ό μ€νμμΌμ£Όλ κ°μμ μ»΄ν¨ν°λΌκ³ μκ°νμλ©΄ λ€μ κΈμ μ΄ν΄νκΈ° μ¬μΈκ±°μμ
(μ°Έκ³ λ‘ JVMμ H/Wμ OS μμμ μ€νλκΈ° λλ¬Έμ JVM μ체λ νλ«νΌμ μ’ μμ μ¦, νλ«νΌμ λ°λΌ νΈνλλ JVMμ μ€νμμΌμ€μΌν¨)
μλ° μ½λ(JAVA Code) μ€ν κ³Όμ
JVMμ μμ λ€μ¬λ€ 보기 μ μ JVMμκ² μ½λκ° μ λ¬λκΈ° κΉμ§μ κ³Όμ μ κ°λ¨νκ² μ΄ν΄λ³΄λ €κ³ ν΄μ
μμ κ·Έλ¦Όμ 보면 μ΄λ€μμΌλ‘ λμκ°λμ§ ν λμ μ μ μλλ°μ λ¨κ³λ³λ‘ μ§μ΄λ³Όκ²μ
1) μμ±ν μλ°μμ€(JAVA Source), μ¦ νμ₯μκ° .javaμΈ νμΌμ μλ° μ»΄νμΌλ¬(JAVA Compiler)λ₯Ό ν΅ν΄ μλ° λ°μ΄νΈμ½λ(JAVA Byte Code)λ‘ μ»΄νμΌνλ€.
2) μ»΄νμΌλ λ°μ΄νΈμ½λλ₯Ό JVMμ ν΄λμ€λ‘λ(Class Loader)μκ² μ λ¬νλ€.
3) ν΄λμ€λ‘λλ λμ λ‘λ©(Dynamic Loading)μ ν΅ν΄ νμν ν΄λμ€λ€μ λ‘λ© λ° λ§ν¬νμ¬ λ°νμ λ°μ΄ν° μμ(Runtime Data area), μ¦ JVMμ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€.
4) μ€νμμ§(Execution Engine)μ JVMλ©λͺ¨λ¦¬μ μ¬λΌμ¨ λ°μ΄νΈ μ½λλ€μ λͺ λ Ήμ΄ λ¨μλ‘ νλμ© κ°μ Έμμ μ€ννλ€.
μ΄μ μμ±ν μλ° μμ€κ° μ΄λ»κ² λμνλ κ±΄μ§ νμ νμΌλ 본격μ μΌλ‘ JVMμ μμ λ€μ¬λ€ λ³Όκ²μ
JVM λμμ리 λ° κΈ°λ³Έκ°λ
JVMμ JAVAμ μ²μμ΄μ λμ΄κΈ° λλ¬Έμ μ€λ μ 리ν λ΄μ©λ§μΌλ‘ λ€ μ 리νλ€λ μκ°μ μ λ νμ§ μκ³ μ°¨μΈ° μ°¨μΈ° λ μμΈν κ·Έλ¦¬κ³ μλ²½ν μ 리ν μμ μ΄μμ μ€λμ λ§λ³΄κΈ°λ‘ μ΄λ»κ² ꡬμ±λμ΄ μμΌλ©° κ° κ΅¬μ±μλ€μ΄ μ΄λ»κ² λμνλμ§μ λν΄μ μ 리νλ €κ³ ν©λλ€
μμλ λ€μκ³Ό κ°μ΄
1) ν΄λμ€ λ‘λ ( Class Loader )
2) λ°νμ λ°μ΄ν° μμ ( Runtime Data Area )
3) μ€ν μμ§ ( Execution Engine )
ν΄λμ€ λ‘λ (Class loader)
ν΄λμ€ λ‘λμ νΉμ§μ ν¬κ² 보면 5κ°μ§λ‘ λλ μ μμ΄μ
1 - κ³μΈ΅κ΅¬μ‘°
2 - μμλͺ¨λΈ
3 - κ°μμ± μ ν
4 - μΈλ‘λ(Unload) λΆκ°
5 - μ΄λ¦κ³΅κ°(Name Space)
λμ λ‘λ©λ λͺ¨λ₯΄λ λμκ² ν΄λμ€λ‘λλ μμνμ§λ§ κ° νΉμ§λ€μ μ°¨λ‘λλ‘ μ 리ν΄λ³Όκ²μ
1 - κ³μΈ΅κ΅¬μ‘°
ν΄λμ€ λ‘λλ λ¨μνκ² νλλ‘ μ΄λ£¨μ΄μ Έ μμ§ μμμ μμ κ·Έλ¦Όμ²λΌ μ¬λ¬ ν΄λμ€ λ‘λλΌλ¦¬ λΆλͺ¨-μμ κ΄κ³λ₯Ό μ΄λ£¨κ³ μμ΄μ κ³μΈ΅μ μΈ κ΅¬μ‘°λ‘ λμ΄ μλλ°μ κ° ν΄λμ€λ‘λλ€μ μ 리νμλ©΄ λ€μκ³Ό κ°μμ
· λΆνΈμ€νΈλ© ν΄λμ€ λ‘λ(Bootstrap Class Loader)
- μ΅μμ ν΄λμ€λ‘λλ‘ μ μΌνκ² JAVAκ° μλλΌ λ€μ΄ν°λΈ μ½λλ‘ κ΅¬νμ΄ λμ΄μλ€.
- JVMμ΄ μ€νλ λ κ°μ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ€
- Object ν΄λμ€λ₯Ό λΉλ‘―νμ¬ JAVA APIλ€μ λ‘λνλ€.
· μ΅μ€ν μ ν΄λμ€ λ‘λ(Extension Class Loader)
- κΈ°λ³Έ JAVA APIλ₯Ό μ μΈν νμ₯ ν΄λμ€λ€μ λ‘λνλ€. (λ€μν 보μ νμ₯κΈ°λ₯ λ‘λ)
· μμ€ν ν΄λμ€ λ‘λ(System Class Loader)
- λΆνΈμ€νΈλ©κ³Ό μ΅μ€ν μ ν΄λμ€λ‘λκ° JVM μ체μ ꡬμ±μμλ€μ λ‘λνλ€λ©΄, μμ€ν ν΄λμ€ λ‘λλ μ΄ν리μΌμ΄μ μ ν΄λμ€λ€μ λ‘λνλ€.
- μ¬μ©μκ° μ§μ ν $CLASSPATH λ΄μ ν΄λμ€λ€μ λ‘λνλ€.
· μ¬μ©μ μ μ ν΄λμ€ λ‘λ(User-Defined Class Loader)
- μ΄ν리μΌμ΄μ μ¬μ©μκ° μ§μ μ½λμμμ μμ±νμ¬ μ¬μ©νλ ν΄λμ€λ‘λ.
μΉ μ΄ν리μΌμ΄μ μλ²(Web Application Server : WAS)μ κ°μ νλ μ μν¬λ μΉ μ΄ν리μΌμ΄μ , μν°νλΌμ΄μ¦ μ΄ν리μΌμ΄μ μ΄ μλ‘ λ λ¦μ μΌλ‘ λμνκ² νκΈ° μν΄μ μ¬μ©μ μ μ ν΄λμ€ λ‘λλ€μ μ¬μ©νμ¬ ν΄λμ€ λ‘λμ μμ λͺ¨λΈμ ν΅ν΄ μ΄ν리μΌμ΄μ μ λ 립μ±μ 보μ₯νλ€κ³ ν΄μ
λ°λΌμ WASμ ν΄λμ€ λ‘λ ꡬ쑰λ WASλ²€λλ§λ€ μ‘°κΈμ© λ€λ₯Έ ννμ κ³μΈ΅ ꡬ쑰λ₯Ό μ¬μ©νκ³ μλ€κ³ ν©λλ€
2 - μμλͺ¨λΈ
μμλͺ¨λΈμ΄λ μ²μ λ°μ΄νΈμ½λλ₯Ό λ겨λ°μ ν΄λμ€ λ‘λκ° νμν ν΄λμ€λ₯Ό λ‘λν λ νΉμ μ€νμμ§μμ λͺ λ Ήμ΄ λ¨μλ‘ λ°μ΄νΈμ½λλ₯Ό μ€ννλ€κ° μ²μμΌλ‘ μ°Έμ‘°νλ ν΄λμ€μ λν΄ ν΄λμ€ λ‘λμκ² λ‘λλ₯Ό μμ²ν λ λ‘λλ₯Ό μμ²λ°μ ν΄λμ€ λ‘λλ λ€μ μμλλ‘ μμ²λ°μ ν΄λμ€κ° μλμ§ νμΈν΄μ
1 - ν΄λμ€ λ‘λ μΊμ
2 - μμ ν΄λμ€ λ‘λ
3 - μκΈ° μμ
μ΄μ μ λ‘λλ ν΄λμ€μΈμ§ ν΄λμ€ λ‘λ μΊμλ₯Ό νμΈνκ³ , μμΌλ©΄ μμ ν΄λμ€ λ‘λλ₯Ό νλμ© κ±°μ¬λ¬ μ¬λΌκ°λ©° νμΈνλλ° μ΄ λ μ€μν μ μ μ¬λΌκ°λ λμ€μ ν΄λμ€λ₯Ό λ°κ²¬νλλΌλ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λκΉμ§ νμΈμ ν΄μ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λμλ ν΄λΉ ν΄λμ€κ° μ‘΄μ¬νλ©΄ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λμ μλ ν΄λμ€λ₯Ό λ‘λνλ€λ μ μ΄μμ
μλ₯Όλ€μ΄, μμ² λ°μ ν΄λμ€κ° μμ€ν ν΄λμ€ λ‘λμ μ‘΄μ¬νμ¬λ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λκΉμ§ νμΈμ νκ³ λΆνΈμ€νΈλ©μλ ν΄λΉ ν΄λμ€κ° μ‘΄μ¬νλ©΄ λΆνΈμ€νΈλ©μ μλ ν΄λμ€λ₯Ό λ‘λνκ² λλκ±°μ£
μ΄λ¬ν νΉμ±μΌλ‘ μΈν΄μ μν€ν μ²λ₯Ό ꡬμ±νλ μμ€μ κ°λ°μλΌλ©΄ JVMμ λν μ§μμ΄ κΌ νμν κ±°κ² μ£
(μ°Έκ³ λ‘ IBMμμ λ§λ μ΄λ€ WASλ μ΅μ μ ν΅ν΄μ μ€κ°μ ν΄λμ€λ₯Ό λ°κ²¬νλ©΄ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λκΉμ§ μ¬λΌκ°μ§ μλλ‘ ν μ μλλ‘ νλ€κ³ ν΄μ)
λ§μ§λ§μΌλ‘ λΆνΈμ€νΈλ© ν΄λμ€ λ‘λμλ ν΄λΉ ν΄λμ€κ° μμΌλ©΄ λ‘λλ₯Ό μμ²λ°μ ν΄λμ€ λ‘λκ° νμΌ μμ€ν μμ ν΄λΉ ν΄λμ€λ₯Ό μ°Ύλκ²μΌλ‘ λ§λ¬΄λ¦¬ λ©λλ€
(νμΌ μμ€ν μμλ μ°Ύμ§ λͺ»νλ©΄ ν΄λμ€λ₯Ό μ°Ύμ§ λͺ»νλ€λ μμΈκ° λ°μνκ² μ£ ?)
3 - κ°μμ± μ ν
μμ λ νΉμ§λ³΄λ€λ μ‘°κΈ κ°λ¨ν νΉμ§μΈλ°μ ν΄λμ€ λ‘λκ° ν΄λμ€ λ‘λλ₯Ό μμ²λ°μμ λ μμλͺ¨λΈμ μν΄μ ν΄λμ€ λ‘λ μΊμλ₯Ό νμΈνκ³ μμΌλ©΄ μμ ν΄λμ€ λ‘λλ₯Ό νμΈνλλ° μ΄ λ νμ ν΄λμ€ λ‘λμ μλ ν΄λμ€λ νμΈμ΄ λΆκ°λ₯ν νΉμ±μ΄ λ°λ‘ κ°μμ± μ νμ λλ€
μ΄λ¬ν νΉμ± λν JVMμ 곡λΆν΄μΌνλ μ΄μ κ° λκ² μ£
4 - μΈλ‘λ(Unload) λΆκ°
μΈλ‘λ λΆκ° μμ κ°λ¨ν κ°λ μΌλ‘ λ§ κ·Έλλ‘ ν΄λμ€λ₯Ό λ‘λνλ κ²μ κ°λ₯νμ§λ§ λ°λλ‘ μΈλ‘λ(Unload)νλ κ²μ λΆκ°λ₯νλ€λ νΉμ±μ λλ€
5 - μ΄λ¦κ³΅κ°(Name space)
λ€μμ€νμ΄μ€λ κ° ν΄λμ€ λ‘λλ€μ΄ κ°μ§κ³ μλ 곡κ°μΌλ‘μ¨ λ‘λλ ν΄λμ€λ₯Ό 보κ΄νλ 곡κ°μ΄μμ ν΄λμ€λ₯Ό λ‘λν λ μμ λͺ¨λΈμ ν΅ν΄μ μμ ν΄λμ€ λ‘λλ€μ νμΈνλλ° κ·Έ λ νμΈνλ 곡κ°μ΄ λ°λ‘ λ€μμ€νμ΄μ€μ λλ€ λ€μμ€νμ΄μ€μ 보κ΄λλ κΈ°μ€μ FQCN(Fully Qualified Class Name)μ κΈ°μ€μΌλ‘ 보κ΄λλλ° FQCNμ΄λ ν¨ν€μ§λͺ κΉμ§ ν¬ν¨λμ΄μλ μλ³μλ₯Ό λ»ν΄μ
κ°κ°μ ν΄λμ€ λ‘λκ° κ°μ λ€μμ€νμ΄μ€λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ ν¨ν€μ§λͺ κΉμ§ κ°μ μ¦, FQCNμ΄ κ°μ ν΄λμ€λΌλ λ€μμ€νμ΄μ€κ° λ€λ₯΄λ©΄(λ€λ₯Έ ν΄λμ€ λ‘λκ° λ‘λν ν΄λμ€μ΄λ©΄) λ€λ₯Έ ν΄λμ€λ‘ κ°μ£Όνλκ²μ΄μ£
(μ΄ νΉμ±μ μ΄μ©νλ©΄ μΈλ‘λλ₯Ό λμ ν΄μ λ‘λν ν΄λμ€ λ‘λλ₯Ό μ κ±°νλ©΄ λ§μΉ μΈλ‘λν κ²κ³Ό κ°μ ν¨κ³Όλ₯Ό μ€ μ μμ΅λλ€)
ν΄λμ€ λ‘λ κ³Όμ
ν΄λμ€ λ‘λκ° μμ§ λ‘λλμ§ μμ ν΄λμ€λ₯Ό λ‘λνλ κ³Όμ μ κ°λ¨νκ² μ΄ν΄λ³΄λ©΄
1 - λ‘λ : ν΄λμ€ νμΌμ κ°μ Έμμ JVMμ λ©λͺ¨λ¦¬μ λ‘λνλ€.
2 - κ²μ¦ : ν΄λμ€ λ‘λ μ κ³Όμ μ€μμ κ°μ₯ 볡μ‘νκ³ μκ°μ΄ λ§μ΄ 걸리λ κ³Όμ μΌλ‘ μ½μ΄λ€μΈ ν΄λμ€κ° μλ° μΈμ΄ λͺ μΈ(JAVA Language Specification) λ° JVM λͺ μΈμ λͺ μλ λλ‘ κ΅¬μ±λμ΄ μλμ§ κ²μ¬νλ€.
3 - μ€λΉ : ν΄λμ€κ° νμλ‘ νλ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ€. νμν λ©λͺ¨λ¦¬λ ν΄λμ€μμ μ μλ νλ, λ©μλ, μΈν°νμ΄μ€λ€μ λνλ΄λ λ°μ΄ν° κ΅¬μ‘°λ€ λ±λ±μ λ§νλ€.
4 - λΆμ : ν΄λμ€μ μμ ν λ΄ λͺ¨λ μ¬λ³Όλ¦ λ νΌλ°μ€λ₯Ό λ€μ΄λ νΈ λ νΌλ°μ€λ‘ λ³κ²½νλ€.
5 - μ΄κΈ°ν : ν΄λμ€ λ³μλ€μ μ μ ν κ°μΌλ‘ μ΄κΈ°ννλ€. ( static νλλ€μ μ€μ λ κ°μΌλ‘ μ΄κΈ°ν λ± )
(μ¬κΈ°μ λΆμ κ³Όμ μμ μ¬λ³Όλ¦ λ νΌλ°μ€λ₯Ό λ€μ΄λ νΈ λ νΌλ°μ€λ‘ λ³κ²½νλ€λλ° μ΄κ² λ¬΄μ¨ μλ―ΈμΈμ§.. μμλ λΆ λκΈλ‘ λ¨κ²¨μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€γ γ )
λ°νμ λ°μ΄ν° μμ(Runtime Data Area)
JVMμ΄ OSμμμ μ€νλλ©΄μ ν λΉλ°λ λ©λͺ¨λ¦¬ μμμ΄ λ°λ‘ λ°νμ λ°μ΄ν° μμ(Runtime Data Area)μ΄μμ μ΄ μμμ ν¬κ² 5κ°μ§ μ‘°κΈ μΈλΆννλ©΄ 6κ°μ§ μμμΌλ‘ λλ μ μλλ°μ
μ΄ μ€ PC λ μ§μ€ν°(PC Register), JVM μ€ν(JVM Stack), λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack)μ μ€λ λ(Thread)λ§λ€ νλμ© μμ±λκ³ ν(Heap), λ©μλμμ(Method Area)μ λͺ¨λ μ€λ λκ° κ³΅μ ν΄μ μ¬μ©λμ
κ° μμμ μ 리ν΄λ³΄λ©΄
· PC λ μ§μ€ν°(PC Register) : PC(Program Counter) λ μ§μ€ν°λ νμ¬ μν μ€μΈ λͺ λ Ήμ μ£Όμλ₯Ό κ°μ§λ©° μ€λ λκ° μμλ λ μμ±λλ©° κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬νλ€.
· JVM μ€ν(JVM Stack) : μ€ν νλ μ(Stack Frame)μ΄λΌλ ꡬ쑰체λ₯Ό μ μ₯νλ μ€νμ΄λ€. μμΈ λ°μ μ printStackTrace() λ©μλλ‘ λ³΄μ¬μ£Όλ Stack Traceμ κ° λΌμΈ νλκ° μ€ν νλ μμ νννλ€. JVM μ€ν μμ PC λ μ§μ€ν°μ λ§μ°¬κ°μ§λ‘ μ€λ λκ° μμλ λ μμ±λλ©° κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬νλ€.
· λ€μ΄ν°λΈ λ©μλ μ€ν(Native Method Stack) : JAVA μΈμ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν μ€νμ΄λ€. JNI(JAVA Native Interface)λ₯Ό ν΅ν΄ νΈμΆνλ C/C++ λ±μ μ½λλ₯Ό μννκΈ° μν μ€νμΌλ‘, μΈμ΄μ λ§κ² μ€νμ΄ μμ±λλ€. (Cλ©΄ Cμ€ν, C++μ΄λ©΄ C++μ€ν μμ±)
· ν : μΈμ€ν΄μ€ λλ κ°μ²΄λ₯Ό μ μ₯νλ 곡κ°μΌλ‘ κ°λΉμ§ 컬λ μ (Garbage Collection) λμμ΄λ€. JVM μ±λ₯ λ±μ μ΄μμμ κ°μ₯ λ§μ΄ μΈκΈλλ 곡κ°μ΄λ€. ν κ΅¬μ± λ°©μμ΄λ κ°λΉμ§ 컬λ μ λ°©λ² λ±μ JVM λ²€λλ€μ μ¬λμ΄λ€.
· λ©μλ μμ(Method Area) : λͺ¨λ μ€λ λκ° κ³΅μ νλ μμμΌλ‘ JVMμ΄ μμλ λ μμ±λλ€. JVMμ΄ μ½μ΄ λ€μΈ κ°κ°μ ν΄λμ€μ μΈν°νμ΄μ€μ λν λ°νμ μμ ν, νλμ λ©μλμ λν μ 보, Static λ³μ, λ©μλμ λ°μ΄νΈ μ½λ λ±μ 보κ΄νλ€.
* λ©μλ μμμ JVMλ²€λλ§λ€ λ€μν ννλ‘ κ΅¬νν μ μμΌλ©°, μ€λΌν΄ ν«μ€ν JVM(HotSpot JVM)μμλ νν Permanent Area, νΉμ Permanent Generation(PermGen) μ΄λΌκ³ λΆλ¦°λ€. λ©μλ μμμ λν κ°λΉμ§ 컬λ μ μ JVM λ²€λμ μ ν μ¬νμ΄λ€.
· λ°νμ μμ ν(Runtime Constant Pool) : JVM λμμμ κ°μ₯ ν΅μ¬μ μΈ μν μ μννλ κ³³μΌλ‘ JVM λͺ μΈμμλ λ°λ‘ μ€μνκ² κΈ°μ νλ€. κ° ν΄λμ€μ μΈν°νμ΄μ€μ μμ λΏλ§ μλλΌ, λ©μλμ νλμ λν λͺ¨λ λ νΌλ°μ€κΉμ§ λ΄κ³ μλ ν μ΄λΈλ‘ μ΄λ€ λ©μλλ νλλ₯Ό μ°Έμ‘°ν λ JVMμ λ°νμ μμ νμ ν΅ν΄ ν΄λΉ λ©μλλ νλμ μ€μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ°Ύμμ μ°Έμ‘°νλ€.
μ€ν μμ§(Execution Engine)
μ€ν μμ§μ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ°νμ λ°μ΄ν° μμμ λ°°μΉλ λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€νν΄μ
(CPUκ° κΈ°κ³ λͺ λ Ήμ΄λ₯Ό νλμ© μ€ννλ―μ΄)
λ°μ΄νΈ μ½λμ κ° λͺ λ Ήμ΄λ 1λ°μ΄νΈ ν¬κΈ°μ OpCode(Operation Code)μ μΆκ° νΌμ°μ°μλ‘ μ΄λ£¨μ΄μ Έ μμ΄μ μ€ν μμ§μ νλμ OpCodeλ₯Ό κ°μ Έμμ νΌμ°μ°μμ μμ μ μνν λ€μ, κ·Έ λ€μ OpCodeλ₯Ό μννλ μμΌλ‘ λμν΄μ
μ΄ μν κ³Όμ μμ μ€ν μμ§μ λ°μ΄νΈ μ½λλ₯Ό κΈ°κ³κ° μ€νν μ μλ ννλ‘ λ³κ²½νλλ° λ€μ λ κ°μ§ λ°©μμΌλ‘ λ³κ²½ν΄μ
· μΈν°νλ¦¬ν° : λ°μ΄νΈ μ½λ λͺ λ Ήμ΄λ₯Ό νλμ© μ½μ΄μ ν΄μνκ³ μ€ννλ€. νλνλμ ν΄μμ λΉ λ₯΄μ§λ§ μ 체μ μΈ μ€ν μλλ λ리λ€λ λ¨μ μ κ°μ§λ€. JVMμμμ λ°μ΄νΈμ½λλ κΈ°λ³Έμ μΌλ‘ μΈν°νλ¦¬ν° λ°©μμΌλ‘ λμνλ€.
· JIT μ»΄νμΌλ¬(Just-In-Time Compiler) : μΈν°ν리ν°μ λ¨μ μ 보μνκΈ° μν΄ λμ λ λ°©μμΌλ‘ λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λλ‘ λ³κ²½νκ³ μ΄νμλ ν΄λΉ λ©μλλ₯Ό λ μ΄μ μΈν°ν리ν νμ§ μκ³ λ€μ΄ν°λΈ μ½λλ‘ μ§μ μ€ννλ λ°©μμ΄λ€. νλμ© μΈν°ν리ν νμ¬ μ€ννλκ²μ΄ μλλΌ λ°μ΄νΈ μ½λ μ μ²΄κ° μ»΄νμΌλ λ€μ΄ν°λΈ μ½λλ₯Ό μ€ννλ κ²μ΄κΈ° λλ¬Έμ μ 체μ μΈ μ€ν μλλ μΈν°ν리ν λ°©μλ³΄λ€ λΉ λ₯΄λ€.
λ€μ΄ν°λΈ μ½λλ μΊμμ 보κ΄νκΈ° λλ¬Έμ ν λ² μ»΄νμΌλ μ½λλ μΊμμμ λ°λ‘ κΊΌλ΄μ΄ μ€ννκΈ° λλ¬Έμ λΉ λ₯΄κ² μνλλ€. νμ§λ§ JIT μ»΄νμΌλ¬κ° μ»΄νμΌνλ κ³Όμ μ λ°μ΄νΈ μ½λλ₯Ό νλμ© μΈν°ν리ν νλ κ²λ³΄λ€ ν¨μ¬ μ€λ 걸리기 λλ¬Έμ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νλ JVMμ λ΄λΆμ μΌλ‘ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό νΈμΆλκ³ μ€νλλμ§ μ²΄ν¬νκ³ , μΌμ κΈ°μ€μ λμμ λμλ§ JIT μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μ»΄νμΌνμ¬ λ€μ΄ν°λΈ μ½λλ₯Ό μμ±νλ€.
JIT μ»΄νμΌλ¬λ₯Ό ν΅ν μ»΄νμΌ κ³Όμ μ λ°μ΄νΈ μ½λλ₯Ό λ°λ‘ λ€μ΄ν°λΈ μ½λλ‘ λ§λλ κ²μ΄ μλλΌ μμμ IR(Intermediate Representation)λ‘ λ³ννμ¬ μ΅μ νλ₯Ό μννκ³ κ·Έ λ€μμ λ€μ΄ν°λΈ μ½λλ‘ λ³νλ κ³Όμ μ κ±°μ³μ
μ€λΌν΄ ν«μ€ν VMμ ν«μ€ν μ»΄νμΌλ¬λΌκ³ λΆλ¦¬λ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νλλ° λ΄λΆμ μΌλ‘ νλ‘νμΌλ§(Profiling)μ ν΅ν΄ κ°μ₯ μ»΄νμΌμ΄ νμν λΆλΆ, μ¦ 'ν«μ€ν'μ μ°ΎμλΈ λ€μ, μ΄ ν«μ€νμ μ»΄νμΌνκΈ° λλ¬Έμ ν«μ€νμ΄λΌ λΆλ₯Έλ€κ³ ν΄μ ν«μ€ν VMμ ν λ² μ»΄νμΌλ λ°μ΄νΈμ½λλΌλ ν΄λΉ λ©μλκ° λ μ΄μ μμ£Ό λΆλ¦¬μ§ μλλ€λ©΄, μΊμμμ λ€μ΄ν°λΈ μ½λλ₯Ό λμ΄λ΄κ³ λ€μ μΈν°νλ¦¬ν° λͺ¨λλ‘ λμν΄μ
ν«μ€ν VMμ μλ² VMκ³Ό ν΄λΌμ΄μΈνΈ VMμΌλ‘ λλμ΄ μκ³ , κ°κ° λ€λ₯Έ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©ν΄μ κ°κ°μ λμΌν λ°νμμ μ¬μ©νμ§λ§, λ€λ₯Έ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©ν΄μ μλ² VMμμ μ¬μ©λλ μ»΄νμΌλ¬κ° λ 볡μ‘νκ³ λ€μν μ±λ₯ μ΅μ ν κΈ°λ²μ μ¬μ©νκ³ μμ΄μ
μ΄μ κΈμ λ§μΉλ©°,, μ΄λ κ² κΈ΄ κΈμ μ¨λ³΄λ건 μ²μμΈλ° μκ°λ³΄λ€ μ€λ 걸리λ€μ
λΆμ‘±ν κΈ λκΉμ§ λ΄μ£Όμ μ κ°μ¬ν©λλ€.
μ΄ κΈμ λ€μ΄λ² D2 JVM Internalμ μ°Έμ‘°νμ¬ μμ±νμμ΅λλ€.