JVM
JDK, JRE, JVM
JDK, JRE, JVMμ λν μ©μ΄λ₯Ό μ 리 νκ² μ΅λλ€.

JDK : Java Development Kit / μλ° κ°λ° λꡬ
JRE : Java Runtime Environment / μλ° μ€ν νκ²½
JVM : Java Virtual Machine / μλ° κ°μ κΈ°κ³
Javaμ νΈνμ±

μ Chapterμμ μμλ³΄κΈ°λ‘ ν CμΈμ΄μ Javaμ μ°¨μ΄μ μ νμΈν΄λ³΄κ² μ΅λλ€.
Javaλ Write Once Use Anywhere μ΄λΌλ λͺ©μ μ κ°μ§κ³ μμ΅λλ€! λ²μνμλ©΄, "μμ€νμΌμ νλλ§ μμ±νλ©΄ μ΄λμμλ μ§ μ¬μ©μ΄ κ°λ₯νλ€!" μ λλ€.
λ°λ©΄μ CμΈμ΄λ One Source Multi Object Use Anywhere λ²μνμλ©΄, "νλμ μμ€νμΌλ‘ κ° κΈ°κ³μ λ§λ λͺ©μ νμΌλ‘ λ§λ€μ΄ μ΄λλ μ¬μ© κ°λ₯νλ€!" μ λλ€.
μ λ¦¬ν΄ λ³΄μλ©΄, νλμ λͺ©μ νμΌλ‘ μ΄λλ μ€νμ΄ κ°λ₯νλ, λ€μμ λͺ©μ νμΌμ λ§λ€μ΄μ κ° κΈ°κ³μ λ§κ² μ¬μ©νλμ μ°¨μ΄λΌκ³ ν μ μμ΅λλ€.
κ²°λ‘ , μ°λ¦¬λ Javaλ₯Ό μ¬μ©νμ¬ κΈ°κ³μ κΈ°μ’ λ³ μ¦, μ΄μ체μ μ ꡬμ λ°μ§ μκ³ κ°λ°μ ν μ μκ² λμμ΅λλ€.
μ¬κΈ°μ Javaμ λͺ©μ νμΌμ λ°κΈ°κ³μ΄μΈ λ°μ΄νΈμ½λ(.class)μΈλ° μ΄λ μ΄μ체μ κ° μλλΌ JVMμμ μ¬μ©λ©λλ€.
μμ€μ½λλ₯Ό λ°μ΄νΈ μ½λλ‘ μ»΄νμΌ ν΄μ£Όλκ² μλ° μ»΄νμΌλ¬(javac)μ λλ€.
κ·ΈλΌ λ€μμΌλ‘ Javaκ° μ΄λ€ κ³Όμ μ ν΅ν΄ μ»΄νμΌλμ΄ μ€νλλμ§ λ³΄κ² μ΅λλ€.
Javaμ μ€ν κ³Όμ

κ°λ°μλ μλ° μμ€νμΌ(.java)λ₯Ό μμ±ν©λλ€.
JDKκ° μ 곡νλ javacλ₯Ό μ¬μ©νμ¬ μμ€νμΌμ μ»΄νμΌν©λλ€.
JVMμ Class Loaderλ μ»΄νμΌλ‘ μμ±λ λ°μ΄νΈ μ½λ(.class)λ₯Ό μ λ¬ λ°μ λμ λ‘λ©μ ν΅ν΄ μ€νμ νμν ν΄λμ€λ€μ λ‘λ©νμ¬ JVM λ΄λΆ Runtime Data Areaμ λ‘λν©λλ€.
JVMμ Executionμ μν΄ κΈ°κ³μ΄λ‘ ν΄μλμ΄ μ€νλ©λλ€.
Class Loader
νλ‘κ·Έλ¨ μμ μμ±ν λͺ¨λ ν΄λμ€, λ³μ λ° λ©μλμ μ 보λ₯Ό Method Areaμ λ°°μΉν©λλ€.
JVM λ΄λΆμ λ°μ΄νΈ μ½λλ₯Ό λ‘λνκ³ λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λμ λλ€.
μ€νλ λ λμ μΌλ‘ ν΄λμ€λ₯Ό λ‘λνκ³ jar νμΌ λ΄λΆμ μ μ₯λμ΄ μλ ν΄λμ€λ€μ JVMμ λ‘λν©λλ€.
static(μ μ ) λ³μμ λ©μλλ Heap Areaμ λ°°μΉν©λλ€.
Execution(μ€ν μμ§)
Interpreterλ λ°μ΄νΈ μ½λλ₯Ό νμ€ μ© μ½κ³ λ²μν΄ μ£Όλλ° λ리λ€λ λ¨μ μ΄ μ‘΄μ¬ν©λλ€.
κ·Έλμ μ΄λ₯Ό 보μνκΈ° μν΄ λμ¨ κ²μ΄ JIT μ»΄νμΌλ¬μ λλ€.
JIT μ»΄νμΌλ¬λ Interpreter λ°©μμΌλ‘ μ€νμ νλ€κ° μ λΉν μμ μ λ°μ΄νΈ μ½λ μ 체λ₯Ό μ»΄νμΌνμ¬ μΊμ±ν©λλ€.
μΊμ± μ¦, μ»΄νμΌλ μ½λλ₯Ό μ μ₯ν΄ λκΈ° λλ¬Έμ μ΄ μ½λλ€μ Interpreterλ₯Ό ν΅ν΄ μ€νλλ κ²μ΄ μλλΌ λ°λ‘ μ€νμ΄ λ©λλ€. κ·Έλ κΈ° λλ¬Έμ μ€ν μλκ° λ§€μ° λΉ¨λΌμ§λλ€.
Garbage Collectorλ κ°λ¨νκ² μ€λͺ νμλ©΄ μ ν¨νμ§ μμ μ¦, μ¬μ©λμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μΆμ νμ¬ λΉμμ£Όλ κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€.
μΆκ°λ‘ μΈν°νλ¦¬ν° μΈμ΄μ μ»΄νμΌ μΈμ΄μ λν΄ νλ² μ 리νκ³ κ°κ² μ΅λλ€.
Compile μΈμ΄μ Interpreter μΈμ΄

Compile μΈμ΄
μμ€νμΌ μ 체λ₯Ό μ»΄νμΌ ν ν κΈ°κ³μ΄λ₯Ό CPUμ λ©λͺ¨λ¦¬λ₯Ό ν΅ν΄ μ½μ΄μ λ°λ‘ μ€ννλ λ°©μμΌλ‘ λμμ΄ λλ μΈμ΄
μ’ λ₯ : C, C++, Java, C# ...
νΉμ§
μμ€νμΌμ ν¬κΈ°κ° ν¬λ©΄ μ»΄νμΌ κ³Όμ μ΄ μ€λ 걸릴 μ μμ΅λλ€.
μ»΄νμΌμ΄ λ νμ κΈ°κ³μ΄λ‘ λ°λ‘ μ€νλκΈ° λλ¬Έμ μ€ν μλκ° λΉ λ¦ λλ€.
Javaλ javacμ μν΄ λ°μ΄νΈμ½λλ‘ μ»΄νμΌ λμ§λ§ JVMμμλ μΈν°ν리ν°λ‘ μ€νλ©λλ€. κ·Έλ¬λ―λ‘ Compile μΈμ΄μ΄μ§λ§, Interpreter μΈμ΄μ νΉμ§μ λμμ κ°μ§λλ€.
Interpreter μΈμ΄
μμ€νμΌμ μ»΄νμΌνμ§ μκ³ μ Interpreterλ₯Ό μ¬μ©νμ¬ μμ€νμΌμ νμ€ μ© λ²μνλ©΄μ μ€ννλ λ°©μμΌλ‘ λμμ΄ λλ μΈμ΄
Interpreter : μμ€ μ½λλ₯Ό λ°λ‘ λ²μνμ¬ μ€ννλ νλ‘κ·Έλ¨ νΉμ νκ²½
μ’ λ₯ : Javascript, Ruby, Python ...
νΉμ§
μ»΄νμΌ μΈμ΄μ²λΌ λ³λμ λͺ©μ νμΌμ΄ μ‘΄μ¬νμ§ μμ΅λλ€.
μ»΄νμΌ κ³Όμ μμ΄ λ°λ‘ μ€νλκΈ° λλ¬Έμ μμ λ° λλ²κΉ μ νΈν©λλ€.
Interpreter λ§ μ‘΄μ¬νλ©΄ μ΄λμλ μ§ μ€νμ΄ κ°λ₯νκΈ° λλ¬Έμ μμ λ‘κ³ λ 립μ μ λλ€.
μ€μκ°μΌλ‘ λ²μ λλ©΄μ μ€νλκΈ° λλ¬Έμ μ€ν μλκ° λ립λλ€.
JVM
JVMμ Java νλ‘κ·Έλ¨μ΄ μ€νλλ κ°μ μ»΄ν¨ν°λΌκ³ μκ°νμλ©΄ λ©λλ€.

μ μ΄λ―Έμ§ μ²λΌ JVMμ λ΄λΆμ μΌλ‘ 볡μ‘ν ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€!
μ°λ¦¬λ μ΄ μ€μμ Runtime Data Areasλ₯Ό κ°λ¨νκ² μ λ¦¬ν΄ λ³΄κ² μ΅λλ€.(Java 8 μ΄ν κΈ°μ€)

μ μ²λ¦¬ κ³Όμ μ΄ν΄νκΈ°
Runtime Data Areasλ₯Ό νμ΅νκΈ° μ μ μ μ²λ¦¬ κ³Όμ μ λν΄ νμ΅νκ² μ΅λλ€.
μμμ JREλ Javaμ μ€ν νκ²½μ΄λΌκ³ λ°°μ μ΅λλ€.
JREλ νλ‘κ·Έλ¨μ μ€ννκΈ° μ μ λ¨Όμ νλ‘κ·Έλ¨μ λ©μΈ λ©μλλ₯Ό ν¬ν¨νκ³ μλμ§ νμΈνκ³ μ‘΄μ¬νλ€λ©΄ JVMμ λΆν μν΅λλ€.
λΆν μ΄λ JVMμ μ λ¬λ°μ μ½λλ₯Ό μ€ν μν€λλ° μ΄λ κ°μ₯ λ¨Όμ νλ μΌμ΄ μ μ²λ¦¬λΌκ³ νλ κ³Όμ μ λλ€.
μ μ²λ¦¬ κ³Όμ
λͺ¨λ Java νλ‘κ·Έλ¨μ λ°λμ java.lang ν¨ν€μ§λ₯Ό ν¬ν¨ν©λλ€. λ°λΌμ JREλ ν΄λΉ ν¨ν€μ§λ₯Ό Method Areaμ λ°°μΉν©λλ€.
νλ‘κ·Έλ¨μ΄ μ¬μ©νκΈ°μν΄ importν ν¨ν€μ§λ€λ μ‘΄μ¬ν κ²λλ€. λ§μ°¬κ°μ§λ‘ Method Areaμ λ°°μΉν©λλ€.
νλ‘κ·Έλ¨ μμ μμ±ν λͺ¨λ ν΄λμ€, λ³μ λ° λ©μλμ μ 보λ₯Ό Method Areaμ λ°°μΉν©λλ€.
static(μ μ ) λ³μμ λ©μλλ Heap Areaμ λ°°μΉν©λλ€.
Runtime Data Areas
μ»΄ν¨ν°μμ λ©λͺ¨λ¦¬ κ°μ μν μ μννλ μμμ λλ€. μλ° νλ‘κ·Έλ¨μ μ€ννμ¬ λ°μνλ λ°μ΄ν°λ₯Ό μ μ₯νλ μν μ νλλ°, λ°μ΄ν°μ μμ±μ λ°λΌ μμμ΄ λΆλ¦¬λμ΄ μμ΅λλ€.
PC Register
μ€λ λκ° μμλ λλ§λ€ μμ±λλ 곡κ°μΌλ‘, μ€λ λλ§λ€ νλμ© μ‘΄μ¬ν©λλ€.
μ€λ λκ° μ΄λ€ λͺ λ Ήμ μν΄ μ€νλμ΄μΌ ν μ§μ λν κΈ°λ‘μ νλ λΆλΆμΌλ‘ νμ¬ μνμ νκ³ μλ JVMμ λͺ λ Ή μ£Όμλ₯Ό κ°κ³ μμ΅λλ€.
Native Method Stack
μλ° νλ‘κ·Έλ¨μ΄ μ»΄νμΌ λμ΄ μμ±λλ λ°μ΄νΈ μ½λκ° μλ μ€μ μ€νν μ μλ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ λλ€.
μλ° μ΄μΈμ μΈμ΄(C, C++, μ΄μ λΈλ¦¬ λ±)λ‘ μμ±λ μ½λλ₯Ό μ€νν λ, Native Method Stackμ΄ ν λΉ λλ©°, μΌλ°μ μΈ C μ€νμ μ¬μ©ν©λλ€.
Java Native Interfaceλ₯Ό ν΅ν΄ λ°μ΄νΈ μ½λλ‘ μ ννμ¬ μ μ₯λ©λλ€.
μΌλ° νλ‘κ·Έλ¨μ²λΌ 컀λμ΄ μ€νμ μ‘μ λ μμ μΌλ‘ νλ‘κ·Έλ¨μ μ€νμν€λ μμμ λλ€.
Method Area(Metaspace, Static Area, Class Area)
ν΄λμ€ μ 보λ₯Ό μ²μ λ©λͺ¨λ¦¬ 곡κ°μ μ¬λ¦΄ λ μ΄κΈ°ν λλ λμμ μ μ₯νκΈ° μν 곡κ°μ λλ€.
ν΄λμ€μ νμ , λ³μ λ° λ©μλλ±μ μ 보λ₯Ό κ°μ§κ³ μμΌλ©° λͺ¨λ Threadκ° κ³΅μ ν©λλ€.
Runtime Constant Pool
μμ μλ£νμ μ μ₯νμ¬ μ°Έμ‘°νκ³ μ€λ³΅μ λ§λ μν μ μνν©λλ€.
Heap Area

κ°μ²΄(μΈμ€ν΄μ€)κ° μμ±λλ μμμ λλ€. νλ‘κ·Έλ¨μ μ€ννλ μ€ μμ±λλ κ°μ²΄λ€μ λͺ¨λ μ΄κ³³μ μμ±λ©λλ€.
Permanent Generation
μμ±λ κ°μ²΄λ€μ μ 보μ μ£Όμκ°μ΄ μ μ₯λ 곡κ°μ λλ€.
ν΄λμ€ λ‘λμ μν΄ λ‘λλλ Class, Method λ±μ λν Meta μ λ³΄κ° μ μ₯λλ μμμ΄λ©° JVMμ μν΄ μ¬μ©λ©λλ€.
Reflectionμ μ¬μ©νμ¬ λμ μΌλ‘ ν΄λμ€κ° λ‘λ©λλ κ²½μ°μ μ¬μ©λ©λλ€.
Java 8 μ΄μ μλ Permanent Generation μ΄ Heap λ΄λΆμ μ‘΄μ¬ νμ§λ§ 8 μ΄ν μ κ±°λκ³ Method Area μ¦, Metaspace λΌ λΆλ¦¬μ°λ©° Heapμ΄ μλ Native λ©λͺ¨λ¦¬ μμμ μ μ₯λ©λλ€. μ΄μ μ μ νλ λ©λͺ¨λ¦¬ ν¬κΈ° λλ¬Έμ λ°μνλ νκ³μ μ 극볡νκΈ° μν΄ λ³κ²½λμμ΅λλ€.
New/Young Generation
Eden : κ°μ²΄λ€μ΄ μ΅μ΄λ‘ μμ±λλ 곡κ°μ λλ€.
Survivor 0,1 : Edenμμ μ°Έμ‘°λλ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°μ λλ€.
μλͺ μ£ΌκΈ°κ° μ§§μ κ°μ²΄λ₯Ό Garbage Collector μ λμμΌλ‘ νλ μμμ λλ€.
Eden μμμ κ°μ²΄κ° κ°λμ°¨κ² λλ©΄ Garbage Collectorμ μν΄ Eden μμμ μλ κ°λ€μ Survivor 1 μμμ 볡μ¬νκ³ μ΄ μμμ μ μΈν λλ¨Έμ§ κ°μ²΄λ€μ μμ ν©λλ€.
Tenured Generation
Old : μ΄κ³³μ κ°μ²΄λ€μ Garbage Collector μ μν΄ μμ λ©λλ€.
New/Young Generation μμ μΌμ μκ° μ°Έμ‘°λκ³ μκ³ μ΄μλ¨μ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°μ λλ€.
μλͺ μ£ΌκΈ°κ° κΈ΄ κ°μ²΄λ₯Ό Garbage Collector μ λμμΌλ‘ νλ μμμ λλ€.
Stack Area

νλ‘κ·Έλ¨ μ€ν κ³Όμ μμ μμλ‘ ν λΉμ΄ λμλ€κ° λ©μλλ₯Ό λΉ μ Έλκ°λ©΄ λ°λ‘ μλ©Έμ΄ λλ νΉμ±μ λ°μ΄ν°λ€μ μ μ₯νκΈ° μν μμμ λλ€.
μ€νλλ λ©μλ λ° μ€κ΄νΈ λΈλ‘(ifλ¬Έλ±)μ λν λ°μ΄ν°κ° μ μ₯λλ μμμ λλ€.
κ°μ₯ μ²μ μ€νλλ λ©μλ(main())κ° μ²« λ²μ§Έλ‘ λ©λͺ¨λ¦¬μ μ¬λΌκ°κ³ κ·Έ λ€μμ μ€νλλ λ©μλλ€μ΄ μμ μμ΄λ ꡬ쑰μ λλ€.
μμ΄λ λ©μλμ λ¨μλ₯Ό μ€ν νλ μμ΄λΌκ³ λΆλ¦ λλ€. ν΄λΉ λ©μλλ₯Ό μ€ννκΈ° μν λ³μ λ° λΈλ‘μ΄ μ‘΄μ¬νλ©΄ μ€ν νλ μ λ΄λΆμ μ€ν νλ μμ΄ μκΈΈ μ μμ΅λλ€.
κ°μ₯ ν° νΉμ§μ λ©ν° μ€λ λ νκ²½μμ κ° μ€λ λκ° κ³ μ μ μ€ν μμμ κ°μ§λ€λ μ μ λλ€.
λλμ΄ λ€μ Chapter λΆν° 본격μ μΌλ‘ Javaμ λν΄ νμ΅ν΄ λ³΄κ² μ΅λλ€!
Last updated