JVM, JRE, JDK - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
JVM์ด๋?
- Java Virtual Machine์ ์ค์๋ง
- Java Byte Code(.class)๋ฅผ ๊ฐ OS์ ๋ง๊ฒ ํด์ํ๊ณ , ํด์๋ ์ฝ๋์ ์คํ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ์คํ์ ๋ด๋นํ๋ ๊ฐ์ ๋จธ์ (OS๋ณ JVM ์ค์น ํ์)
JRE๋?
- Java Runtime Environment์ ์ค์๋ง
- JVM๊ณผ ์๋ฐ ์คํ์ ํ์ํ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Java Class Library)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- JRE๋ฅผ ๋ค์ด๋ก๋๋ฐ์ Java Byte Code(.class)๋ฅผ ์คํ์ํฌ ์ ์๋ค. (.java ์ปดํ์ผ ๋ถ๊ฐ)
JDK๋?
- Java Development Kit์ ์ค์๋ง
- JRE์ javac, jconsole, jhat ๋ฑ์ ๊ฐ๋ฐ์ ํ์ํ ํด์ ํฌํจํ๊ณ ์๋ค.
- JDK๋ฅผ ๋ค์ด๋ก๋๋ฐ์ Java Byte Code(.class)๋ฅผ ์คํ์ํฌ ์ ์๊ณ .javaํ์ผ์ ์ปดํ์ผํ ์ ์๋ค.
JVM์ ์ ์์์ผ ํ ๊น?
์ด๋ค ํ๋ก๊ทธ๋จ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๊ทธ ํ๋ก๊ทธ๋จ์ ์คํ ํ๊ฒฝ ๊ตฌ์ฑ์ ์์์ผ ํ๋ค.
JVM์ผ๋ก ๊ตฌ๋๋๋ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ, JVM์ด ํ๋ก๊ทธ๋จ ์คํ ์ ๋ฐ์ ๊ดํ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ด๋นํ๋ค.
JVM์ ํน์ง
-
Java Byte Code(.class)๋ ๊ธฐ๊ณ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ OS์์ ๋ฐ๋ก ์คํ๋์ง ์๋๋ค. JVM์ Java Byte Code๋ฅผ ๊ฐ OS์ ๋ง๊ฒ ํด์ ํด์ฃผ๋ ์ญํ ์ ํ์ฌ JVM ์์์ ์คํ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๊ฒ '์ด์์ฒด์ ์ ๋ ๋ฆฝ์ ์ผ ์ ์๋ค'๋ ์ฅ์ ์ ์ ๋ฌผํ๋ค.
-
JVM์์ ์ฝ๋ ์คํ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ์ํด, Java Byte Code(.class)๋ฅผ OS์ ๋ง๊ฒ ๊ธฐ๊ณ์ด๋ก ํด์ํ๋ ๋จ๊ณ๊ฐ ํ์์ ์ด๋ค. ๋ฐ๋ผ์ ํ ์ธ์ด(ex C, C++)์ ์คํํ๊ฒฝ์ ๋นํด ์๋๊ฐ ๋๋ฆฌ๋ค. ํ์ง๋ง JIT(Just In Time)์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์๋ ์ด์๋ฅผ ๊ทน๋ณตํ๋ค.
JVM Language (JVM์์ ์คํ๊ฐ๋ฅํ ์ธ์ด)
- Scala
- Groovy
- Clojure
- Kotlin
- Ceylon
- Xtend
- Fantom
- X10
(Java ์คํ ๊ณผ์ ์์ ์์๋ณด๋) JVM์ ๊ตฌ์ฒด์ ์ธ ์ญํ
ํ๋ก๊ทธ๋๋จธ๊ฐ .java ํ์ผ์ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ java ์ปดํ์ผ๋ฌ๋ .java ํ์ผ์ .class ๋ผ๋ Java Byte Code๋ก ์ปดํ์ผํ๋ค.
์ด์ ๋ถํฐ JVM์ด ์๋๋๋ค.
Class Loader
Class Loader(ํด๋์ค ์ ์ฌ๊ธฐ)๋ load, link, initialize ์ธ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ค.
Loading
Java Byte Code๋ฅผ Runtime Data Area ๋ด์ Method Area๋ก ์ ์ฌ
Linking
Java Byte Code๊ฐ ์๋ฐ ๊ท์น์ ๋ฐ๋ฅด๋์ง ๊ฒ์ฆํ๊ณ , ํด๋์ค์ ์ ์๋
ํ๋, ๋ฉ์๋, ์ธํฐํ์ด์ค๋ค์ ๋ํ๋ด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๋นํ๋ฉฐ
๊ทธ ํด๋์ค๊ฐ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ก๋ฉํ๋ค.
Initialization
static block ์ ์ด๊ธฐํ ๋ฐ static ๋ฐ์ดํฐ๋ค์ ํ ๋นํ๋ค.
Class Loader๊ฐ ์ํ๋๋ ๋ฐฉ์์ ๋๊ฐ์ง๋ก ๋๋๋ค.
๋ก๋ํ์ ๋์ ๋ก๋ฉ(load-time dynamic loading)
.class ํ์ผ๋ค์ ๋ก๋ํ๋ ์์ (๋ก๋ํ์)์ ํ์ํ ํด๋์ค๋ค์ ๋ก๋ํ๋ค.
๋ฐํ์ ๋์ ๋ก๋ฉ(run-time dynamic loading)
๋ก๋ํ์ ๋์ ๋ก๋ฉ์ด ๋๋ ํ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด์(๋ฐํ์) ํ์ํ ํด๋์ค๋ค์ ๋ก๋ํ๋ค.
Execution Engine
Execution Engine(์คํ ์์ง)์ Runtime Data Area์ Method Area์ ์ ์ฌ๋ Java Byte Code๋ฅผ
๊ธฐ๊ณ์ด๋ก ์ปดํ์ผํ ํ ์คํ์ํจ๋ค. (์ปดํ์ผ ๊ณผ์ ์์ JIT ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ๋๋ค.)
๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ Garbage Collection์ ์ํํ๋ค.