ν΄λΉ ν¬μ€ν μ λ°±κΈ°μ λμ μΈνλ° κ°μ(λ μλ°, μ½λλ₯Ό μ‘°μνλ λ€μν λ°©λ²)λ₯Ό λ£κ³ μ 리ν λ΄μ©μ λλ€.
Java, JVM, JDK, JRE
JVM (Java Virtual Machine)
- μλ° λ°μ΄νΈ μ½λ(.class νμΌ)λ₯Ό OSμ νΉνλ μ½λλ‘ λ³ν(μΈν°ν리ν°μ JIT μ»΄νμΌλ¬)νμ¬ μ€ννλ€.
- λ°μ΄νΈ μ½λλ₯Ό μ€ννλ νμ€μ΄μ ꡬν체μ΄λ€.
- JVM μ체λ νμ€, ꡬν체λ νΉμ λ°΄λλ€μ΄ ꡬν
- JVM λ°΄λ: μ€λΌν΄, μλ§μ‘΄, Azul, ...
- νΉμ νλ«νΌμ μ’
μμ μ΄λ€.
- λ°μ΄νΈ μ½λλ₯Ό λ€μ΄ν°λΈ μ½λλ‘ λ°κΏμ μ€νν΄μΌνλλ°, μ΄λ λ€μ΄ν°λΈ μ½λκ° OSμ μ’ μμ μ΄κΈ° λλ¬Έ.
JRE (Java Runtime Environment)
- μλ° μ ν리μΌμ΄μ μ μ€νν μ μλλ‘ κ΅¬μ± (JVM + λΌμ΄λΈλ¬λ¦¬)
- JVMκ³Ό ν΅μ¬ λΌμ΄λΈλ¬λ¦¬ λ° μλ° λ°νμ νκ²½μμ μ¬μ©νλ νλ‘νΌν° μΈν μ΄λ 리μμ€ νμΌμ κ°μ§κ³ μλ€.
JDK (Java Development Kit)
- JRE + κ°λ° ν΄
- μμ€ μ½λλ₯Ό μμ±ν λ μ¬μ©νλ μλ° μΈμ΄λ νλ«νΌμ λ
립μ μ΄λ€.
- λ°μ΄νΈ μ½λ(.class νμΌ)λ§ μλ€λ©΄ JVM μμμ λμκ°.
- JVM μΈμ΄: ν΄λ‘μ , 그루λΉ, JRuby, Jython, Kotlin, Scala, ...
- μ€λΌν΄μ μλ° 11λΆν°λ JDKλ§ μ 곡νκ³ , JREλ₯Ό λ°λ‘ μ 곡νμ§ μλλ€.
Java
- νλ‘κ·Έλλ° μΈμ΄
- JDKμ λ€μ΄μλ μλ° μ»΄νμΌλ¬(javac)λ₯Ό μ¬μ©νμ¬ λ°μ΄νΈ μ½λλ‘ μ»΄νμΌ ν μ μλ€.
- μλ° μ λ£ν
- μ€λΌν΄μμ λ§λ Oracle JDK 11 λ²μ λΆν° μμ©μΌλ‘ μ¬μ©ν λ μ λ£
- μλ° μΈμ΄ μμ²΄κ° μ λ£νλλκ² μλ
- Open JDK λ±μ 무λ£λ‘ μ¬μ©κ°λ₯
JVM ꡬ쑰
ν΄λμ€ λ‘λ μμ€ν
- .class νμΌμμ λ°μ΄νΈ μ½λλ₯Ό μ½κ³ λ©λͺ¨λ¦¬μ μ μ₯
- λ‘λ©: ν΄λμ€ μ½μ΄μ€λ κ³Όμ
- λ§ν¬: λ νΌλ°μ€λ₯Ό μ°κ²°νλ κ³Όμ
- μ΄κΈ°ν: static κ°λ€ μ΄κΈ°ν λ° λ³μμ ν λΉ
λ©λͺ¨λ¦¬
- λ©μλ μμ
- ν΄λμ€ μμ€μ μ 보(ν΄λμ€λͺ , λΆλͺ¨ ν΄λμ€λͺ , λ©μλ, λ³μ)λ₯Ό μ μ₯νλ€.
- 곡μ μμ (λ€λ₯Έ μμμμ μ°Έμ‘° κ°λ₯)
- ν μμ
- κ°μ²΄λ₯Ό μ μ₯νλ€.
- 곡μ μμ (λ€λ₯Έ μμμμ μ°Έμ‘° κ°λ₯)
- μ€ν μμ
- μ°λ λ λ§λ€ λ°νμ μ€νμ λ§λ€κ³ , λ©μλ νΈμΆμ μ€ν νλ μμ΄λΌ λΆλ₯΄λ λΈλμΌλ‘ μλλ€.
- PC(Program Counter) λ μ§μ€ν°
- μ°λ λ λ§λ€ μ°λ λ λ΄ νμ¬ μ€νν λͺ λ Ήμ μμΉλ₯Ό κ°λ₯΄ν€λ ν¬μΈν°κ° μμ±λλ€.
- λ€μ΄ν°λΈ λ©μλ μ€ν
- λ€μ΄ν°λΈ λ©μλλ Cλ C++, μ΄μ λΈλ¦¬λ‘ μμ±λ λ©μλλ‘, JNIλ₯Ό ν΅ν΄ νΈμΆ κ°λ₯νλ€.
- λ€μ΄ν°λΈ λ©μλμλ native ν€μλκ° λΆμ΄μλ€.
μ€ν μμ§
- μΈν°ν리ν°
- λ°μ΄νΈ μ½λλ₯Ό κΈ°κ³κ° μ΄ν΄ ν μ μλλ‘ ν μ€ μ© λ€μ΄ν°λΈ μ½λλ‘ λ°κΏμ μ€ννλ€.
- JIT μ»΄νμΌλ¬
- μΈν°νλ¦¬ν° ν¨μ¨μ λμ΄κΈ° μν΄, μΈν°ν리ν°κ° λ°λ³΅λλ μ½λλ₯Ό λ°κ²¬νλ©΄ JIT μ»΄νμΌλ¬λ‘ λ°λ³΅λλ μ½λλ₯Ό λͺ¨λ λ€μ΄ν°λΈ μ½λλ‘ λ°κΏλλ€.
- GC(Garbage Collector)
- λ μ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό λͺ¨μμ μ 리νλ€.
ν΄λμ€ λ‘λ
λ‘λ©, λ§ν¬, μ΄κΈ°ν μμΌλ‘ μ§νλλ€.
λ‘λ©
- ν΄λμ€ λ‘λκ° λ°μ΄νΈ νμΌμ μ½κ³ λ΄μ©μ λ°λΌ μ μ ν λ°μ΄λ리 λ°μ΄ν°λ₯Ό λ§λ€κ³ "λ©μλ" μμμ μ μ₯νλ€.
- λ©μλ μμμ μ μ₯νλ λ°μ΄ν°
- FQCN(Fully Qualified Class Name): ν¨ν€μ§ μ΄λ¦ + ν΄λμ€ μ΄λ¦ (+ ν΄λμ€ λ‘λ)
- ν΄λμ€, μΈν°νμ΄μ€, μ΄λ
- λ©μλ, λ³μ
- λ‘λ©μ΄ λλλ©΄ ν΄λΉ ν΄λμ€ νμ
μ Class κ°μ²΄λ₯Ό μμ±νμ¬ "ν" μμμ μ μ₯νλ€.
- Class<Hello>
λ§ν¬
- Verify, Prepare, Resolve(optional) μΈ λ¨κ³λ‘ λλ μ Έ μλ€.
- Verify: .class νμΌ νμ μ ν¨μ± 체ν¬
- Prepare: ν΄λμ€ λ³μ(static λ³μ)μ κΈ°λ³Έκ°μ νμν λ©λͺ¨λ¦¬λ₯Ό μ€λΉ
- Resolve(optional): μ¬λ³Όλ¦ λ©λͺ¨λ¦¬ λ νΌλ°μ€λ₯Ό λ©μλ μμμ μλ μ€μ λ νΌλ°μ€λ‘ κ΅μ²΄
- μ¬λ³Όλ¦ λ νΌλ°μ€λ μ°Έμ‘°νλ λμμ μ΄λ¦λ§μ μ§μΉν κ²μ΄λ€.
μ΄κΈ°ν
- static λ³μμ κ°μ ν λΉνλ€.
- static λΈλ‘μ μ€ννλ€.
ν΄λμ€ λ‘λλ κ³μΈ΅ κ΅¬μ‘°λ‘ μ΄λ£¨μ΄μ Έ μλ€.
λΆνΈ μ€νΈλ© ν΄λμ€ λ‘λ
- JAVA_HOME\libμ μλ μ½μ΄ μλ° APIλ₯Ό μ 곡νλ€.
- μ΅μμ μ°μ μμλ₯Ό κ°μ§ ν΄λμ€ λ‘λ
νλ«νΌ ν΄λμ€ λ‘λ
- JAVA_HOME\lib\ext ν΄λ λλ java.ext.dirs μμ€ν λ³μμ ν΄λΉνλ μμΉμ μλ ν΄λμ€λ₯Ό μ½λλ€.
μ ν리μΌμ΄μ ν΄λμ€ λ‘λ
- μ ν리μΌμ΄μ ν΄λμ€ν¨μ€μμ ν΄λμ€λ₯Ό μ½λλ€.
- μ ν리μΌμ΄μ ν΄λμ€ν¨μ€: μ ν리μΌμ΄μ μ€νν λ μ£Όλ -classpath μ΅μ λλ java.class.path νκ²½ λ³μμ κ°μ ν΄λΉνλ μμΉ