[Java] - JVM
Java
λνκ΅μμ μ²μ Javaλ₯Ό 곡λΆν λ λ€μλ μ΄μΌκΈ°λ WORA(Write Once Run Anywhere)λΌλ λ΄μ©μ΄λ€. μμ§ν μμ¦ μΈμμ μ΄λ€ μΈμ΄λ‘ μμ±νλ μ΄λμλ λ릴 μ μλ€κ³ μκ°νλ€.
μ΄ λΆλΆμ λν΄μ μμΈν μκΈ° μν΄μλ Compile, Interpretedλ₯Ό μμμΌνλ€.
Compile
μ°λ¦¬κ° νν μ»΄νμΌ νμμ΄λΌκ³ λΆλ₯΄λ μ΄ μ©μ΄λ νλ‘κ·Έλλ° μΈμ΄λ‘ μ½λλ₯Ό μμ±ν λ€, μ€ννκΈ° μ μ 미리 μ»΄ν¨ν°κ° μ½μ μ μλ μΈμ΄λ‘ λ²μ μμ μ ν΄λλ κ²μ μλ―Ένλ€.
public class Post {
private String title, content;
public Post() {
}
}
μμ κ°μ΄ κ°λ¨ν μ½λκ° μ»΄νμΌ λλ©΄ μλμ κ°μ λ°μ΄νΈ μ½λλ‘ λ³νλλ€.
// class version 61.0 (61)
// access flags 0x21
public class ka/Post {
// compiled from: Post.java
// access flags 0x2
private Ljava/lang/String; title
// access flags 0x2
private Ljava/lang/String; content
// access flags 0x1
public <init>()V
L0
LINENUMBER 10 L0
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
RETURN
L1
LOCALVARIABLE this Lka/chapter3/item10/consistency/Post; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
}
μ€μ λ‘ μ°λ¦¬κ° μ΄ν리μΌμ΄μ μ μ€νν λλ μ΄ λ°μ΄νΈ μ½λλ₯Ό ν λλ‘ μ€ννκ² λλ€.
μ¦, μ»΄νμΌ κ³Όμ μ ν΅ν΄ μ°λ¦¬κ° μμ±ν μ½λμ μ΄λ€ λ¬Έμ κ° μλμ§ νμΈν μ μκ³ , μ»΄ν¨ν°κ° μ½μ μ μλ μΈμ΄λ‘ μμ±νκΈ° λλ¬Έμ μ€ν μλλ λΉ λ₯Έ κ²μ΄λ€!
Interpreted
Interpretedλ μ»΄νμΌκ³Ό λ€λ₯΄κ² μμ±ν μ½λλ₯Ό κ·Έλλ‘ κ°κ³ μλ€κ° μ€νμ μν¬ λ, μ€μκ°μΌλ‘ μ½μ΄μ£Όλ©΄μ μΌμ μν€λ μΈμ΄μ΄λ€.
κ°λ°μλ λ κ°νΈν μ μμ§λ§, μ€λ₯μ μ·¨μ½νκ³ , μ€νμ΄ λ리λ€λ λ¨μ μ΄ μλ€.
JVM(Java Virtual Machine)
μμμ λ³Έ κ²κ³Ό κ°μ΄ μ»΄ν¨ν° OS μ’ λ₯λ§λ€ μ°λ κΈ°κ³ μΈμ΄κ° λ€ λ€λ₯΄λ€. Window νκ²½μμ CμΈμ΄λ‘ μμ±λ λ°μ΄νΈ μ½λλ Mac, Linux νκ²½μμ λλ¦¬μ§ λͺ»νλ€.
Mac, Linuxλ λͺ¨λ UNIX κΈ°λ°μ μ΄μ체μ μ΄λ€. λλ¬Έμ λλΆλΆ νΈνμ΄ κ°λ₯νμ§λ§, μ΄μ 체μ μ λ§μ§ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν κ²½μ° νΈνλμ§ μμ μ μλ€.
νμ§λ§ Javaλ Cμ κ°μ μΈμ΄μ λ¬λ¦¬ JVMμ ν΅ν΄ μ΄λμλ μ€νν μ μλ€.
μ°λ¦¬κ° νλ‘κ·Έλ¨μ μ€μΉν λ, μ΄μ 체μ μ λ§λ νλ‘κ·Έλ¨μ μ€μΉνλ κ²μ²λΌ Java λν μ΄μ 체μ μ λ§κ² μ€μΉλ₯Ό νλ€. λλ¬Έμ JVMμ νμ¬ μ΄μ체μ μ λ§λ κΈ°κ³ μΈμ΄μ μλ° λ°μ΄νΈ μ½λ μΈμ΄λ₯Ό ν μ μμ΄ WORAκ° κ°λ₯ν΄μ§ κ²μ΄λ€.
Runtime
κ·Έλ¬λ©΄ μ»΄νμΌ λ λ°μ΄νΈ μ½λλ μ΄λ€ κ³Όμ μ ν΅ν΄ μ€νμ΄ λ κΉ?
- JVMμ΄ OSλ‘λΆν° μ ν리μΌμ΄μ μ΄ μ€νμ μν΄ νμλ‘νλ λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ
- JVMμ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬ν¨
- μ»΄νμΌλ¬κ° μ°λ¦¬κ° μμ±ν μλ° νμΌμ μ½μ΄ ν΄λμ€ νμΌ(λ°μ΄νΈμ½λ)λ‘ λ³νν¨
- λ³κ²½λ ν΄λμ€ νμΌ(λ°μ΄νΈ μ½λ)λ€μ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ JVM λ©λͺ¨λ¦¬ μμμΌλ‘ λ‘λ©ν¨
- λ‘λ©λ ν΄λμ€ νμΌ(λ°μ΄νΈ μ½λ)λ€μ Execution Engineμ ν΅ν΄ ν΄μν¨
- ν΄μλ λ€μ΄ν°λΈ μ½λλ₯Ό λ©λͺ¨λ¦¬ μμμ λ°°μΉνκ³ , μ½λλ₯Ό μνν¨
JIT Compiler
JITμ΄λ, Just In Timeμ μ½μλ‘ νλ‘κ·Έλ¨μ μ€μ μ€ννλ μμ μ λ²μνλ μ»΄νμΌ κΈ°λ²μ΄λ€.
μμ μ€λͺ ν κ³Όμ κ³Ό κ°μ΄ ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ JVM λ©λͺ¨λ¦¬ μμμΌλ‘ λ‘λ©νκ² λλ€. μ΄ν, μ€μ λ©λͺ¨λ¦¬ μμμ λ°°μΉνκΈ° μ λ€μ΄ν°λΈ μ½λλ‘ λ²μν΄ μ»΄ν¨ν°κ° μ½μ μ μλλ‘ νλ κ²μ΄λ€.
JRE(Java Runtime Environment)
JREλ μλ° μ€ν νκ²½μ μ½μμ΄λ€. JVMμ΄ μ ν리μΌμ΄μ
μ€νκ³Ό κ΄λ ¨μ΄ μμΌλ―λ‘, JRE λ΄λΆμ μν΄μλ€.
μ΄ μΈμλ μ°λ¦¬κ° νν μ¬μ©νλ util
μ΄λ math
λ±κ³Ό κ°μ νμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ μλ€.
java.util.*;
java.math.*;
JDK(Java Development Kit)
JDKλ μλ° κ°λ° ν€νΈμ μ½μμ΄λ€. μ°λ¦¬κ° μλ° μΈμ΄λ₯Ό κ°λ°ν μ μλ μ΄μ κ° JDK λλΆμ΄λ€.
JDKλ κ°λ°μ ν μ μμ΄μΌνκ³ , μ€νκΉμ§ ν΄μΌν μ μμ΄μΌνκΈ° λλ¬Έμ μλμ κ°μ μμλ€μ΄ ν¬ν¨λμ΄ μλ€.
- Compiler : μ°λ¦¬κ° μμ±ν μλ° μ½λλ₯Ό λ°μ΄νΈ μ½λλ‘ λ³νν΄μ€
- JRE : νμ€ λΌμ΄λΈλ¬λ¦¬μ JVMμ ν΅ν΄ μ½λλ₯Ό μ€νν μ μλλ‘ ν΄μ€
- Debuger : μ½λ μ€ν νλ¦μ νλνλ νμΈν μ μκ² λμμ€
- JAR : μ€νν μ μλλ‘ μμΆν΄μ€
μ΄λ¬ν μμλ€μ νμ©ν΄ μ°λ¦¬κ° μλ° νλ‘κ·Έλ¨μ κ°λ°, ν μ€νΈ, μ€νκΉμ§ ν μ μκ² λλ κ²μ΄λ€.
λκΈλ¨κΈ°κΈ°