JVMμ 무μμΌκΉ?
Java Virtual Machine μ μ½μλ‘, μλ°λ₯Ό μ€ννκΈ° μν κ°μ κΈ°κ³λΌκ³ ν μ μλ€. μ¬κΈ°μ κ°μ κΈ°κ³λ μννΈμ¨μ΄λ‘ ꡬνλ νλμ¨μ΄λ₯Ό λ»νλ λμ μλ―Έμ μ©μ΄μ΄λ€. ( μ»΄ν¨ν° μ±λ₯μ ν₯μμΌλ‘ λ§μ μννΈμ¨μ΄λ€μ΄ μννΈμ¨μ΄νλμ΄ μ»΄ν¨ν° μμΌλ‘ λ€μ΄μ€κ³ μλ€ )
μ½κ² λ§ν΄
μλ°λ₯Ό μ€ννκΈ° μν κ°μμ μ»΄ν¨ν°
λΌκ³ μ΄ν΄νλ©΄ μ’μ κ²μ΄λ€.
μλ°λ‘ μμ±λ μ ν리μΌμ΄μ μ λͺ¨λ μ΄ κ°μ μ»΄ν¨ν°(JVM) μμλ§ μ€νλκΈ° λλ¬Έμ μλ° μ΄ν리μΌμ΄μ μ΄ μ€νλκΈ° μν΄μλ λ°λμ JVMμ΄ νμνλ€.
JVM μ μ νμν κΉ?
μμ μλ° μ΄ν리μΌμ΄μ μ΄ μ€νλκΈ° μν΄μλ λ°λμ JVM μ΄ νμνλ€κ³ νλλ° μ΄κ² μ λ°λμ νμν κ²μΌκΉ?
μ»΄ν¨ν°λ κΈ°κ³μ΄λ§ μμλ€μ μ μκΈ° λλ¬Έμ μ¬λμ΄ μμ±ν μ½λλ₯Ό μ»΄ν¨ν°κ° μμλ€μ μ μκ² μ»΄νμΌλ¬λ₯Ό ν΅ν΄ λ²μν΄μ£Όμ΄μΌ νλ€. μ΄λ κ² μ»΄νμΌλ¬κ° μ¬λμ΄ μμ±ν μ½λλ₯Ό 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ κΈ°κ³μ΄λ‘ μ»΄νμΌ ν΄μ£Όμμ λ λΉλ‘μ μ»΄ν¨ν°κ° κ±°κΈ°μ λ§κ² νλν μ μλ κ²μ΄λ€.
νμ§λ§ κΈ°κ³μ΄λ μ€ννκ²½μ λ°λΌ μ°μ΄λ κΈ°κ³μ΄κ° λ€λ₯΄κΈ° λλ¬Έμ μ€ννκ²½μ λ§κ²λ μ»΄νμΌ ν΄μ£Όμ΄μΌνλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νμν κ²μ΄ λ°λ‘ JVMμ΄λ€.
Java λ‘ νλ‘κ·Έλλ°μ νκ³ μ»΄νμΌμ κ±°μΉλ©΄ λ°λ‘ κΈ°κ³μ΄λ‘ λ³νλμ§ μκ³ λ°μ΄νΈ μ½λ(.class)λ‘ λ³νλλ€. κ·Έλ¦¬κ³ λ§μ½ μ λ¬ν΄μ£Όλ μ»΄ν¨ν°μ JVMμ΄ μ‘΄μ¬νλ€λ©΄ JVMμ μ΄λ₯Ό λ°μμ μ€ννκ²½μ λ§κ²λ κΈ°κ³μ΄λ‘ λ²μν΄μ£Όκ³ μ»΄ν¨ν°λ κΈ°κ³μ΄λ‘ νλ‘κ·Έλλ° λͺ λ Ήμ μ€νν μ μλ κ²μ΄λ€.
μμ½νμλ©΄ JVMμ μλ° μ½λμ κΈ°κ³μ΄ μ¬μ΄μ μ‘΄μ¬νλ λ°μ΄νΈ μ½λλ₯Ό JVMμ΄ κΉλ¦° μ΄λ€ μ’ λ₯μ μ€ννκ²½μμλ λμκ° μ μκ²λ λμμ£ΌκΈ° μν΄ μ‘΄μ¬νλ κ²μ΄λ€. κ·Έλ¦¬κ³ μ΄λ¬ν JVMμΌλ‘ μΈν΄ μλ°μ μ€μν μ₯μ μ€ νλμΈ "νλ² μμ±νλ©΄ μ΄λμλ μ€νλλ€" (Write once, run anywhere) κ° κ°λ₯νκ² λλ κ²μ΄λ€.
μΌλ° μ ν리μΌμ΄μ κ³Ό μλ° μ ν리μΌμ΄μ λΉκ΅
μΌλ° μ΄ν리μΌμ΄μ μ κ²½μ°, μ½λκ° OSλ§ κ±°μΉκ³ νλμ¨μ΄λ‘ μ λ¬λλ©° OSμ λ°λ‘ λ§λΆμ΄ μκΈ° λλ¬Έμ OSμ μ’ μμ μ΄λ€. μ¦, μ ν리μΌμ΄μ μ λ€λ₯Έ OSμμ μ€νμν€κΈ° μν΄μλ κ·Έ OSμ λ§κ²λ λ³κ²½ν΄μΌ νλ€.
λ°λ©΄ Java μ΄ν리μΌμ΄μ μ, JVM νκ³ λ§ μνΈμμ©νκΈ° λλ¬Έμ OSμ λ 립μ μ΄λ€. μ¦, μ ν리μΌμ΄μ μ λ€λ₯Έ OSμ μ€νμν€κΈ° μν΄μ λ³κ²½ν νμκ° μλ€. λ¬Όλ‘ μ ν리μΌμ΄μ μ΄ λ 립μ μΈ κ²μ΄κ³ μ ν리μΌμ΄μ λμ OSμ λ§λΆμ΄μλ JVMμ OSμ μ’ μμ μ΄λ€. μ¦, ν΄λΉ OSμ μ€νκ°λ₯ν JVMμ΄ νμνλ€.
μλ° μ ν리μΌμ΄μ μ΄ JVMμ νλ² λ κ±°μΉκ³ , νλμ¨μ΄μ λ§κ² μμ ν μ»΄νμΌλ μνκ° μλκ³ μ€ν μμ ν΄μλκΈ° λλ¬Έμ μλκ° λ리λ€λ λ¨μ μ κ°μ§κ³ μμ§λ§ μμ¦λ€μ΄ λ°μ΄νΈμ½λ(μ»΄νμΌλ μλ° μ½λ)λ₯Ό κΈ°κ³μ΄λ‘ λ°λ‘ λ³νν΄μ£Όλ JIT μ»΄νμΌλ¬μ ν₯μλ μ΅μ ν κΈ°μ μ΄ μ μ©λμ΄ μλ μ°¨μ΄λ₯Ό λ§μ΄ μ€μλ€.
μμ½νμλ©΄ λ€μκ³Ό κ°λ€.
μΌλ° μ΄ν리μΌμ΄μ
- OSμ μ’ μμ μ΄λ€.
- μλμ μΌλ‘ λΉ λ₯΄λ€.
μλ° μ΄ν리μΌμ΄μ
- OSμ λ 립μ μ΄λ€. ( JVMμ΄ μ’ μμ μ΄λ€. )
- μλμ μΌλ‘ λ리λ€. ( μ΅κ·Ό κ²©μ°¨κ° λ§μ΄ μ€μλ€. )
JVM μ μν κ³Όμ ( λμ λ°©μ )
μ§κΈκΉμ§ κΈμ μ½μλ€λ©΄ JAVA μ΄ν리μΌμ΄μ μ΄ μνλκΈ° κΉμ§ .java(μμ€ μ½λ) -> μ»΄νμΌλ¬ -> .class(λ°μ΄νΈ μ½λ) -> jvm -> μ€νμ μμλ₯Ό κ°μ§λ€λ κ²μ μ μ μμ κ²μ΄λ€. κ·Έλ λ€λ©΄ JVM λ΄λΆμμ λ°μ΄νΈ μ½λλ₯Ό μ΄λ»κ² μ²λ¦¬νλμ§ μμ보μ.
JVMμ μ»΄νμΌλ λ°μ΄νΈ μ½λλ₯Ό λ°μ λ€μ μλμ κ°μ μμλ‘ μ²λ¦¬νλ€.
- Class Loader λͺ¨λμ μ¬μ©ν΄μ λ°νμ μμ λμ μΌλ‘ ν΄λμ€λ₯Ό RunTime Data Areaμ λ‘λνλ€.
- RunTime Data Areaμ λ‘λ©λ class λ€μ Execution Engineμ ν΅ν΄ ν΄μλλ€.
- ν΄μλ λ°μ΄νΈ μ½λλ Runtime Data Areaμ κ° μμμ λ°°μΉλμ΄ μνλλ©° μ΄ κ³Όμ μμ Execution Engineμ μν΄ GCμ μλκ³Ό Thead λκΈ°νκ° μ΄λ£¨μ΄μ§λ€.
κ° λͺ¨λμ λν΄μλ μμ보μ
Class Loader
- JVM λ΄λ‘ ν΄λμ€ νμΌμ λ‘λνκ³ , λ°°μΉνλ μμ μ μννλ λͺ¨λ
Execution Engine
- ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ JVM λ΄μ Runtime Data Areaμ λ°°μΉλ λ°μ΄νΈ μ½λλ€μ λͺ λ μ΄ λ¨μλ‘ μ½μ΄μ μ€ν.
μ΅μ΄ JVMμ΄ λμμ λΉμμλ μΈν°νλ¦¬ν° λ°©μμ΄μκΈ°λλ¬Έμ μλκ° λ리λ€λ λ¨μ μ΄ μμμ§λ§ JIT μ»΄νμΌλ¬ λ°©μμ ν΅ν΄ μ΄ μ μ 보μνλ€. JITλ λ°μ΄νΈ μ½λλ₯Ό μ΄μ λΈλ¬ κ°μ λ€μ΄ν°λΈ μ½λλ‘ λ°κΏμΌλ‘μ¨ μ€νμ΄ λΉ λ₯΄μ§λ§ μμ λ³ννλλ° λΉμ©μ΄ λ°μνλλ° μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ JVMμ λͺ¨λ μ½λλ₯Ό JIT μ»΄νμΌλ¬ λ°©μμΌλ‘ μ€ννμ§ μκ³ , μΈν°νλ¦¬ν° λ°©μμ μ¬μ©νλ€κ° μΌμ ν κΈ°μ€μ΄ λμ΄κ°λ©΄ JIT μ»΄νμΌλ¬ λ°©μμΌλ‘ μ€ννλ€.
Garbage Collector
Garbage Collector(GC)λ ν λ©λͺ¨λ¦¬ μμμ μμ±λ κ°μ²΄λ€ μ€μμ μ°Έμ‘°λμ§ μμ κ°μ²΄λ€μ νμ ν μ κ±°νλ μν μ νλ€. μ΄λ, GCκ° μν μ νλ μκ°μ μΈμ μΈμ§ μ νν μ μ μλ€.
Runtime Data Area
JVMμ λ©λͺ¨λ¦¬ μμμΌλ‘ μλ° μ ν리μΌμ΄μ μ μ€νν λ μ¬μ©λλ λ°μ΄ν°λ€μ μ μ¬νλ μμμ΄λ€. μ΄ μμμ ν¬κ² Method Area, Heap Area, Stack Area, PC Register, Native Method Stackλ‘ λλ μ μλ€.
μ΄μ λμ κ³Όμ μ κ³Όμ μ λ°λΌ μ’ λ μμΈνν λμμΌλ‘ μμ보μ
JVMμ λ©λͺ¨λ¦¬ ꡬ쑰
μμ© νλ‘κ·Έλ¨μ΄ μ€νλλ©΄, JVMμ μμ€ν μΌλ‘λΆν° νλ‘κ·Έλ¨μ μννλλ° νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°κ³ JVMμ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬νλ€λ κ²μ μ μ μλ€. μ΄μ μ΄ λ©λͺ¨λ¦¬ μμμ ꡬ쑰λ₯Ό μμ보μ.
λ©μλ μμ β
λͺ¨λ μ°λ λκ° κ³΅μ νλ λ©λͺ¨λ¦¬ μμμ΄λ©° ν΄λμ€μ λν μ 보(ν΄λμ€ λ°μ΄ν°)λ₯Ό μ μ₯νλ μμμ΄λ€. ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ, static λ³μ λ±μ λ°μ΄νΈ μ½λλ₯Ό 보κ΄νλ€.
ν μμ β
λͺ¨λ μ°λ λκ° κ³΅μ νλ©° μΈμ€ν΄μ€ λ³μ, new ν€μλλ‘ μμ±λ κ°μ²΄μ λ°°μ΄μ΄ μμ±λλ λμ μΈ μμμ΄λ€. λν λ©μλ μμμ λ‘λλ ν΄λμ€λ§ μμ±μ΄ κ°λ₯νκ³ GCκ° μ°Έμ‘°λμ§ μλ λ©λͺ¨λ¦¬λ₯Ό νμΈνκ³ μ κ±°νλ μμμ΄λ€. μ¦ νλ‘κ·Έλ¨ μ€ν μ€ μμ±λλ μΈμ€ν΄μ€λ€μ΄ μμ±λλ 곡κ°μ΄λ€.
νΈμΆ μ€ν μμ β
λ©μλ μμ μ νμν λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νλ€. λ©μλκ° μμ μ μννλ λμ μ§μλ³μλ€κ³Ό μ°μ°μ μ€κ°κ²°κ³Ό λ±μ μ μ₯νλλ° μ¬μ©λλ©° μμ μ λ§μΉ κ²½μ° ν λΉλμλ λ©λͺ¨λ¦¬ 곡κ°μ λ°νλμ΄ λΉμ΄μ§λ€. μ¦, νΈμΆλ λ©μλμ λ§€κ°λ³μ, μ§μλ³μ, λ¦¬ν΄ κ° λ° μ°μ° μμ μΌμ΄λλ κ°λ€μ μμλ‘ μ μ₯νλ 곡κ°μ΄λ€.
μ΄ μμμ λ€μκ³Ό κ°μ΄ λ©μλκ° νΈμΆλ λλ§λ€ μνμ νμν λ©λͺ¨λ¦¬λ₯Ό μ€νμ ν λΉλ°κ³ μνμ λ§μΉκ³ λλ©΄ μ¬μ©νλ λ©λͺ¨λ¦¬λ₯Ό λ°ννκ³ μ€νμμ μ κ±°κ° λλ€. λ§μ½ 첫 λ²μ§Έ λ©μλλ₯Ό μ€ννλ μ€μ λ€λ₯Έ λ©μλλ₯Ό νΈμΆνλ©΄ λ©μλ μμ λ λ²μ§Έ νΈμΆλ λ©μλλ₯Ό μν 곡κ°μ΄ λ§λ ¨λλ€. λ°ννμ μ΄ μλ λ©μλμ κ²½μ° μ’ λ£λλ©° κ²°κ³Όκ°μ μμ μ νΈμΆν λ©μλμκ² λ°ννκ³ λκΈ°μνμ μλ λ©μλλ λ겨λ°μ λ°νκ°μΌλ‘ μνμ κ³μ μ§ννκ² λλ€.
PC Register
μ°λ λκ° μμλ λ μμ±λλ©° μμ±λλ 곡κ°μΌλ‘ μ°λ λλ§λ€ νλμ© μ‘΄μ¬νλ€. μ°λ λκ° μ΄λ€ λΆλΆμ λ¬΄μ¨ λͺ λ ΉμΌλ‘ μ€νν μ§μ λν κΈ°λ‘μ νλ λΆλΆμΌλ‘ νμ¬ μνμ€μΈ JVM λͺ λ Ήμ μ£Όμλ₯Ό κ°λλ€.
Native Method Stack
μλ° μΈ μΈμ΄λ‘ μμ±λ λ€μ΄ν°λΈ μ½λλ₯Ό μν λ©λͺ¨λ¦¬ μμμ΄λ€.
'π¬ κ°λ°μΈμ΄ > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ JAVA ] JRE,JDK (0) | 2023.02.10 |
---|---|
[ JAVA ]String ν΄λμ€ κ°λ¨ν μ 리 (0) | 2023.02.05 |
λκΈ