[JVM] JVM์ด๋
1. JVM์ด๋
- JVM์ Java Vertual Machine์ ์ฝ์๋ก โ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ๊ฐ์ ๊ธฐ๊ณโ๋ฅผ ๋งํ๋ค.
JVM์ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น
JVM์ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด์์ฒด์ ์ ์๊ด์์ด ์คํ๐ฌ์ํฌ ์ ์๋๋ก ํด์ฃผ๊ณ
์ ํํ๊ฒ๋ Java๋ผ๋ ์ธ์ด๊ฐ JVM์ผ๋ก ์ธํด์ OS์ ๋
๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ด๋ค.
JVM์์ฒด๋ก๋ OS๋ง๋ค ์ ์๋ ์คํ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ JVM ์์ฒด๋ OS์ ์ข
์์ ์ด๋ค.
ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ต์ ํ๋ฅผ ํด์ค๋ค.
์๋ฐ๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์
์ JVM์ ํตํด ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ JVM์ด ํ์ํ๋ค.
์์ ์ฌ์ง์ฒ๋ผ OS๋ก ์ ๋ฌ๋๊ธฐ ์ ์ JVM์ ๊ฑฐ์ณ ํด์๋๊ณ ์คํ๋๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
ํ์ง๋ง ์ต๊ทผ์๋ JIT ์ปดํ์ผ๋ฌ์ ์ฑ๋ฅ ํฅ์๊ณผ ์ต์ ํ ๊ธฐ์ ์ ๋ฐ๋ฌ๋ก ์๋ ์ ํ๊ฐ ๋ง์ด ์ค์๋ค.
๋ฐ๋ฉด์ OS์ HW์ ๋
๋ฆฝ์ ์ด๋ผ๋ ํน์ง ๋๋ฌธ์
WORA๐ฌ
Write Once Run Anywhere
๊ฐ ์คํ์ด ๊ฐ๋ฅํ๋ค.
WORA์ ๋ํด ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ ๊ธ
2. JVM์ ๊ตฌ์กฐ์ ๋์๊ณผ์
JVM์ ๊ตฌ์กฐ
JVM์ ํฌ๊ฒ Runtime Data Area,
Garbage Collector,
Execution Engine,
Class Loader์ 4๊ฐ์ง ์์ญ์ผ๋ก ๋๋๋ค.
-
Runtime Data Area
JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์์ฉํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด OS๋ก๋ถํฐ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ๊ณ
JVM์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๊ฒ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ญ์ Method Area, Heap Area, Stack Area, PC register, Native Method Stack์ผ๋ก ๋๋๋ค.
Runtime Data Area์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐ๋ก ์ ๋ฆฌํ ๊ธ์ธ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ ๋ณผ ์ ์๋ค. -
Garbage Collector
GC๋ JVM ์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๊ฐ ํ ๋น๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค.
GC๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๋์์ Runtime Data Area์ Heap ์์ญ์ ๊ฐ์ฒด ์ค์์ ์ฐธ์กฐ๋์ง ์์ ๋ฐ์ดํฐ์ด๋ค.
JVM์์ ์๋์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ค ํ์๊ฐ ์๋ค.
GC๋ง์ผ๋ก๋ ๋ด์ฉ์ด ๋ง๊ธฐ Java์ Garbage Collector์์ GC์ ๋ํด ์์ธํ ์์๋ณด์. -
Class Loader
์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์ณ ์์ฑ๋ .class ํ์ผ๋ค์
Class Loader๊ฐ ์ด์์ฒด์ ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ Runtime Data Area๋ก ์ ์ฌํ๋ ์ญํ ์ ํ๋ค.
์์ธํ ๋ด์ฉ์ Java์ Class Loader์ ์ ๋ฆฌํด๋จ๋ค. -
Execution Engine
Class Loader์ ์ํด Runtime Data Area๋ก ์ ์ฌ๋ .class ํ์ผ๋ค์ ํ๋์ ๋ช ๋ น ๋จ์๋ก
์ฝ์ด์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ๋ช ๋ น์ ์คํํ๋ค.
Interpreter ๋ฐฉ์๊ณผ JIT๐ฌJust-In-Time๋ฐฉ์์ด ์กด์ฌํ๋ค.
Interpreter์ JIT
JVM์ ๋์ ๊ณผ์
JVM์ ๋์๊ณผ์ ์ ์์๋ณด์.
์ฌ์ง์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์๋ฐ ์ฝ๋๋ (*
.java)๋ผ๋ ํ์ฅ์๋ก ์ปดํจํฐ์ ์ ์ฅ์ด ๋๋ค.
(*
.java)๋ CPU๊ฐ ์ธ์์ ํ์ง ๋ชปํ๋ฏ๋ก ๊ธฐ๊ณ์ด๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค.
ํ์ง๋ง java๋ ์์ ๋งํ๋ฏ์ด JVM์ ๊ฑฐ์ณ OS์ ๋๋ฌํ๊ธฐ ๋๋ฌธ์ OS๊ฐ ์ธ์ํ๋ ๊ธฐ๊ณ์ด๊ฐ ์๋๋ผ
JVM์ด ์ธ์ํ ์ ์๋ Java Bytecode(*
.class)๋ก ๋ณํ๋๋ค.
์ด ๊ณผ์ ์ ์ปดํ์ผ ๊ณผ์ ์ด๋ผํ๋ฉฐ ์ฌ๊ธฐ์ Java Compiler๊ฐ ๋์ํ๋ค.
๐ก Java Compiler๋ JDK์ ํฌํจ๋์ด ์๋ javac.exe ๋ฅผ ๋งํ๋ค.
โโbin ํด๋์ ๊ฐ๋ณด๋ฉด ํ์ธํ ์ ์๋ค.
์๋์ฐ์ ๋ช
๋ น ํ๋กฌํํธ(cmd)๋ฅผ ์ด์ฉํด ์ปดํ์ผ์ ํ ์ ์๋ค.
(*
.java) ํ์ผ์ด ์ ์ฅ๋ ์์น๋ก ์ด๋ ํ
์ด๋ ๊ฒ ์
๋ ฅํด์ฃผ๋ฉด ์ปดํ์ผ์ด ๋์ด (*
.class) ํ์ผ์ด ์์ฑ๋๋ค.
๋ณํ๋ java bytecode๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๊ณ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ OS๋ฐ๋ก ์คํ๋์ง ์๊ณ
JVM์ด OS์ ๋ง์ถฐ java bytecode๋ฅผ ์ดํดํ ์ ์๋๋ก ํด์ํด ์คํ๋๋ค.
์ด ๊ณผ์ ์์ ์์ ์ธ๊ธํ๋ Runtime Data Area, Garbage Collector, Execution Engine, Class Loader๋ ์๋ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ java ํ์ผ๋ง ๋ง๋ ๋ค๋ฉด ์ด๋ ๋๋ฐ์ด์ค์์๋ OS์ ์๊ด์์ด ์คํ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
3. JVM, JRE, JDK์ ์ฐจ์ด
JVM์ ๊ณต๋ถํ๋ฉด ๋น์ฐํ ๋ฐ๋ผ์ค๋ ๊ฒ์ด JDK์ JRE์ด๋ค.
JVM์ ์์์ ์ค๋ช
ํ์ผ๋ฏ๋ก JRE์ JDK๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์์๋ณด์.
JRE
JRE๋
์๋ฐ ๋ฐํ์ ํ๊ฒฝ
๐ฌ
๋ฐํ์ ํ๊ฒฝ
์ด๋ ํ ์ํํธ์จ์ด๋ฅผ ์คํ์ํค๊ธฐ ์ํ ๋๋ค๋ฅธ ์ํํธ์จ์ด.
(Java Runtime Enviroment) ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
๋ฐ๋ผ์, JRE๋ Java๊ฐ ๋์ํ๋๋ฐ ํ์ํ ๋ค์ํ ๊ตฌ์ฑ์์๋ฅผ ํฌํจํ๋ค.
JRE์ ๊ตฌ์กฐ
JRE๋ ์ฌ๋ฌ ์์๋ก ์ด๋ฃจ์ด์ง ์ปจํ
์ด๋์ด๋ค.
ํฌ๊ฒ
Class Libraries,
Class Loader,
Java Vertual Machine์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
-
Class Loader
Class Loader๋ ์ฌ์ค ์๋ฐํ ๋งํ์๋ฉด JVM์ ์ํ์ง ์๋๋ค.
JVM๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ด์ JVM๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ด์ JVM์ ์ค๋ช ํ ๋ ํ์์ ์ผ๋ก ์ธ๊ธ๋์ง๋ง
์ ํํ๊ฒ๋ JRE์ ์ํด ์๋ ๊ฒ์ด๋ค.
์์์ ์ธ๊ธํ ๋ด์ฉ์ด๋ฏ๋ก Pass ! -
Class Libraries
JRE๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋น์ค ๊ฐ์ ์๋ฒฝํ ๋ฐ์ดํฐ ์ฐ๊ฒฐ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๋ ๋ค์์ ํตํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค. -
JVM
์์์ ์ค๋ช ํ JVM์ JRE์ ํฌํจ๋์ด ์๋ค.
JDK
JDK๋ Java Development์ ์ฝ์๋ก ์๋ฐ ๊ฐ๋ฐ ํคํธ๋ฅผ ์๋ฏธํ๋ค.
JRE์ javac๋ฑ์ ์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ ๋ฑ์ ํฌํจํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
JDK ํฌํจ๊ด๊ณ ๋์๋
JDK ๊ตฌ์ฑ
- apt : ์ด๋ ธํ ์ด์ ํด
- appletviewer : ๋ค๋ฅธ ๊ฐ๋ฐ ํด ์์ด๋ ์๋ฐ ์ ํ๋ฆฟ์ ์คํ์ํค๊ณ ๋๋ฒ๊น ํ ์ ์๋ ํด
- jdb : ์๋ฐ ๋๋ฒ๊น ํด
- javac : ์๋ฐ ์ปดํ์ผ๋ฌ ์ด ์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ฐ ํด์ด ๋ ์กด์ฌํ๋ค.
JDK ์ข ๋ฅ
-
Java SE (Java Platform Standard Edition)
ํ์ค ์๋ฐ ํ๋ซํผ, ํ์ค์ ์ธ ์ปดํจํ ํ๊ฒฝ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฐ์๋จธ์ ๊ท๊ฒฉ ๋ฐ API์งํฉ์ ํฌํจํ๋ค.
์๋ฐ๋ผ๋ ์ธ์ด๊ฐ ์ด๋ค ๋ฌธ๋ฒ์ ๊ตฌ์ฑ์ ๊ฐ์ก๋์ง์ ๊ฐ์ ๊ฒ๋ค์ ์ ์ํ๊ณ ์๋ค.
๊ตฌ์ฒด์ ์ธ ์ํํธ์จ์ด๊ฐ ์๋๊ณ ๊ทธ ์ํํธ์จ์ด์ ์ค๊ณ๋๋ผ๊ณ ํ ์ ์๋ค. -
Java EE (Java Platform Enterprise Edition)
Java SE์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ๋์ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ํ๋ซํผ์ด๋ค. -
Java ME (Java Platform Micro Edition)
์กฐ๊ธ ๋ ์ ํ๋ ์์์ ๊ฐ์ง ํด๋์ ํ, PDA ๋ฑ์์ Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํ๋ซํผ์ด๋ค.
๊ฒฐ๋ก
- JDK๋ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํ ํด์ ์ ๊ณตํด์ค๋ค.
- JRE์ ํตํด JRE๊ฐ ์ค์น๋์ด ์๋ค๋ฉด ์ด๋ ํ๊ฒฝ์์๋ ์คํํ ์ ์๋ค.