-
[Java] JVMμ΄λ? μλ° μ½λ μ€νAndroid/Java 2021. 1. 11. 01:28λ°μν
- μ΄ κΈμ "μ¨λΌμΈ μλ° μ€ν°λ λ΄μ©"μ μ 리ν κΈμ λλ€.
JVMμ΄λ?
Javaλ λ€λ₯Έ μΈμ΄μ λ¬λ¦¬ νλ«νΌμ μ’ μμ μ΄μ§ μλ€λ νΉμ§μ κ°μ§κ³ μμ΅λλ€. μ΄λ¬ν νΉμ§μ κ°μ§ μ μκ² λμμ£Όλ μννΈμ¨μ΄κ° JVMμ λλ€.
JVMμ Java Virtual Machine μ½μ΄λ‘ μλ° νλ‘κ·Έλ¨μ μ€νμν€κΈ° μν΄ νμμ μΈ λ°νμ νκ²½μ μ 곡νλ νλ‘κ·Έλ¨μ λλ€.
JVMμ μ£Όμ μν λ‘ μλ° μμ€μ½λκ° μ»΄νμΌμ νμ¬ λ°μ΄νΈμ½λλ‘ λ³νκ² λλ©΄ λ°μ΄νΈμ½λλ₯Ό κ° μ΄μ체μ μ λ§λ κΈ°κ³μ΄λ‘ λ€μ λ²μνλ μν μ λ΄λΉνκ³ μμ΅λλ€.
κ·Έ μΈμλ λ©λͺ¨λ¦¬ κ΄λ¦¬, Garbage Collection μ΄λΌλ μ€μν μν μ μννκ³ μμ΅λλ€.
μ»΄νμΌ λ°©λ²
μλ°λ λΉλ μ, μλ° νμΌ(.java)μ μλ° μ»΄νμΌλ¬(javac.exe)λ₯Ό μ΄μ©νμ¬ JVMμ΄ μ΄ν΄ν μ μλ μ€κ°λ¨κ³μ μΈμ΄μΈ λ°μ΄νΈ μ½λ(.class)λ‘ λ°κΏμ€λλ€.
Java νλ‘κ·Έλ¨μ μ»΄νμΌ νλ λνμ μΈ IDEλ‘ Intelljμ eclipseκ° μμ΅λλ€. μ΄μΈμλ κ°λ¨ν μλ° νλ‘κ·Έλ¨ κ°μ κ²½μ°λ terminal, cmdμμλ zμ»΄νμΌμ΄ κ°λ₯ν©λλ€.
public class Main { public static void main(String[] args) { System.out.println("Hello world"); } }
javac < program name > κ³Ό κ°μ΄ λͺ λ Ήμ΄λ₯Ό μ λ ₯νλ©΄ terminalμμλ μ€νμ΄ κ°λ₯ν©λλ€.
μ€ν λ°©λ²
μ»΄νμΌ νλ κ³Όμ μμ λ§λ€μ΄μ§ λ°μ΄νΈ μ½λ(_.class)λ₯Ό *_java < class name >** λͺ λ Ήμ΄λ₯Ό μ λ ₯νλ©΄ μ€νμν¬ μ μμ΅λλ€.
λλ java < argument > < program name > λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μλ° νλ‘κ·Έλ¨μ μ€νμν¬ μ μμ΅λλ€.
λ°μ΄νΈμ½λλ?
μ»΄νμΌμ΄λ μ¬λμ΄ μ΄ν΄ν μ μλ μΈμ΄λ₯Ό μ»΄ν¨ν°κ° μ΄ν΄ν μ μλ μΈμ΄λ‘ λ°κΎΈλ κ³Όμ μΌλ‘ μμ€μ½λμμ λͺ©μ μ½λλ‘ λ°κΎΈλ κ³Όμ μ λλ€.
C, C++ μμ€μ½λλ μ»΄νμΌ μ λͺ©μ μ½λμΈ κΈ°κ³μ΄λ‘ λ³νκ² λκ³ javaλ λ°μ΄νΈ μ½λλ‘ λ³νκ² λ©λλ€.
μλ°μ λ°μ΄νΈ μ½λλ JVMμ΄ μ€ννλ λͺ λ Ήμ΄ μ§ν©μΌλ‘ μ»΄νμΌ μ μμ±λλ .class νμΌμ΄ λ°μ΄νΈ μ½λλ₯Ό λ΄κ³ μμ΅λλ€.
λ°μ΄νΈ μ½λλ OSμ μ’ μμ μ΄μ§ μλ λͺ λ Ήμ΄ μ§ν©μ μ¬μ©νλ©°, μ΄κ²μ΄ μλ°μ ν¬λ‘μ€ νλ«νΌ λμμ κ°λ₯νκ² ν΄μ£Όλ λΆλΆμ λλ€.
javap < class name > λͺ λ Ήμ΄ μ λ ₯ μ λ°μ΄νΈ μ½λλ₯Ό νμΈν μ μμ΅λλ€.
JIT μ»΄νμΌλ¬
λ°μ΄νΈ μ½λλ κΈ°κ³κ° λ°λ‘ μ½μ μ μλ ννκ° μλκ³ μ΄ λ°μ΄νΈ μ½λλ μ€μ μ€νλ λ λ€μ νλ² κΈ°κ³κ° μ½μ μ μλ νν(native code)λ‘ μΈν°ν리ν°λ₯Ό ν΅ν΄ λ²μλμ΄μΌ ν©λλ€.
μΈν°ν리ν°λ λ°λ³΅μ μΈ μμ μ΄λλΌκ³ κ³μ λ²μνλ μμ μ κ±°μΉκΈ° λλ¬Έμ μλκ° λ릴 μ λ°μ μλλ° μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μΌλ‘ JIT μ»΄νμΌλ¬κ° λ±μ₯νμμ΅λλ€.
JIT μ»΄νμΌλ¬λ μΈν°νλ¦¬ν° λ°©μμΌλ‘ μ€ννλ€κ° μ μ ν μμ μ λ°μ΄νΈμ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ λ€μ΄ν°ν¬ μ½λλ‘ λ³κ²½νκ³ , μ΄νμλ μΈν°νλ¦¬νΉ νμ§ μκ³ λ€μ΄ν°λΈ μ½λλ‘ μ§μ μ€ννλ λ°©μμ λλ€. λ€μ΄ν°λΈ μ½λλ μΊμμ 보κ΄νκΈ° λλ¬Έμ νλ² μ»΄νμΌλ μ½λλ λΉ λ₯΄κ² μνν μ μμ΅λλ€.
JIT μ»΄νμΌλ¬κ° μ»΄νμΌνλ κ³Όμ μ λ°μ΄νΈμ½λλ₯Ό μΈν°ν리ν νλ κ²λ³΄λ€ μ€λ걸리기 λλ¬Έμ JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νλ JVMμ ν΄λΉ λ©μλκ° μΌλ§λ μμ£Ό μνλλ μ§ μ²΄ν¬νκ³ , μ μ μμ€μ λμ κ²½μ°μ μ»΄νμΌμ μνν©λλ€.
JVMμ ꡬμ±
Class Loader
JVM λ΄λ‘ .classνμΌμ λ‘λνκ³ , λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λμ λλ€.
λ°νμ μ λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λνλλ° jarνμΌ λ΄ μ μ₯λ ν΄λμ€λ JVM μμ νμ¬νκ³ μ¬μ©νμ§ μλ ν΄λμ€λ λ©λͺ¨λ¦¬μμ μμ ν©λλ€. μ¦ ν΄λμ€λ₯Ό μ²μμΌλ‘ μ°Έμ‘°ν λ, ν΄λΉ ν΄λμ€λ₯Ό λ‘λνκ³ λ§ν¬νλ μν μ μνν©λλ€.Exection Engine
ν΄λμ€λ₯Ό μ€νμν€λ μν μ λλ€. ν΄λμ€ λ‘λκ° JVMλ΄μ λ°νμ λ°μ΄ν° μμμ λ°μ΄νΈ μ½λλ₯Ό λ°°μΉμν€κ³ , μ€νμμ§μ μν΄ μ€νλ©λλ€.
μ€νμμ§μ λ°μ΄νΈμ½λλ₯Ό μ€μ λ‘ JVMλ΄λΆμμ κΈ°κ³κ° μ€νν μ μλ ννλ‘ λ³κ²½ν©λλ€. μ΄ λ InterPreterμ JIT λ°©μμ΄ μ¬μ©λ©λλ€.Garbage Collector
λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ² μ€ νλλ‘ νλ‘κ·Έλ¨μ΄ λμ μΌλ‘ ν λΉνλ λ©λͺ¨λ¦¬ μμ μ€ μ¬μ©νμ§ μλ μμμ ν΄μ νλ κΈ°λ₯μ λλ€.
JDKμ JREμ μ°¨μ΄
JRE
JRE (Java Runtime Environment)λ Java νλ‘κ·Έλλ° μΈμ΄λ‘ μμ±λ μμ© νλ‘κ·Έλ¨μ μ€ννκΈ° μν λΌμ΄λΈλ¬λ¦¬, Java Virtual Machine λ° κΈ°ν κ΅¬μ± μμλ₯Ό μ 곡ν©λλ€.
JDK
JDK (Java Development Kit)λ JREμ μμ μ§ν©μ΄λ©° JREμ μλ λͺ¨λ νλͺ©κ³Ό μμ© νλ‘κ·Έλ¨ κ°λ°μ νμν μ»΄νμΌλ¬ λ° λλ²κ±°μ κ°μ λꡬλ₯Ό ν¬ν¨ν©λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ°μ°μ (μ°μ , λΉνΈ, κ΄κ³, λ Όλ¦¬) (0) 2021.01.12 [Java] μλ° λ°μ΄ν° νμ , λ³μ κ·Έλ¦¬κ³ λ°°μ΄ (0) 2021.01.11 [Java] λμμΈ ν¨ν΄(Decorator ν¨ν΄) (0) 2021.01.08 [Java] λμμΈ ν¨ν΄(Adapter ν¨ν΄) (0) 2021.01.07 [Java] λμμΈ ν¨ν΄ (Singleton ν¨ν΄) (0) 2021.01.05