๋ชฉ์ฐจ : ํ์ตํ ๊ฒ
- JVM์ด๋ ๋ฌด์์ธ๊ฐ
- ์ปดํ์ผ ํ๋ ๋ฐฉ๋ฒ
- ์คํํ๋ ๋ฐฉ๋ฒ
- ๋ฐ์ดํธ์ฝ๋๋ ๋ฌด์์ธ๊ฐ
- JIT ์ปดํ์ผ๋ฌ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ํ๋์ง
- JVM ๊ตฌ์ฑ ์์
- JDK์ JRE์ ์ฐจ์ด
JVM์ด๋ ๋ฌด์์ธ๊ฐ
JVM์ ์๋ฐ ๊ฐ์ ๋จธ์ (Java Virtual Machine)์ ์ฝ์๋ก ์๋ฐ ๋ฐ์ดํธ ์ฝ๋(.classํ์ผ)์ OS์ ํนํ๋ ์ฝ๋๋ก ๋ณํ(์ผ๋ฐ์ ์ผ๋ก, ์ธํฐํ๋ฆฌํฐ๋ JIT ์ปดํ์ผ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ์ปดํจํฐ ์์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ๊ตฌํํ๋ค)ํ์ฌ ์คํํ๋ค. JVM์ ์ด์์ฒด์ ๋ง๋ค ๋ค๋ฅด๋ค. ์๋์ฐ์ ํนํ๋ JVM์ด ์๊ณ , Linux์ ํนํ๋ JVM์ด ์๊ณ , Mac OS์ ํนํ๋ JVM์ด ์์๊ฒ์ด๋ค. ํ์ง๋ง ์๋ฐ์ ๋ฐ์ดํธ์ฝ๋(.classํ์ผ)๋ ์ด๋ค JVM์์๋ ๋ค ๋์์ ํ๊ธฐ ๋๋ฌธ์, ํ์ค ์๋ฐ API๊น์ง ๋์ผํ ๋์์ ํ๋๋ก ๊ตฌํํ ์ํ์์๋ ๋ชจ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์ด์ ์ฒด์ ์ ์ข ๋ฅ์ ์๊ด์์ด ๋ ๋ฆฝ์ ์ด๋ค ๋ผ๊ณ ํ ์ ์๋ ๊ฒ์ด๋ค. ์ด์์ฒด์ ์ ๋ํด์๋ ๋ ๋ฆฝ์ ์ด๊ฒ ๋์ง๋ง, JVM์ ๋ํด์๋ ์ข ์์ ์ด๊ฒ ๋๋ค.
์ปดํ์ผ ํ๋ ๋ฐฉ๋ฒ
์คํ ํ๊ฒฝ : MAC OS X, JDK 11
- cmd ์คํ
- ์คํํ .java ํ์ผ ๊ฒฝ๋ก ์
๋ ฅ
- javac Test.java
- ์คํํ .java ํ์ผ ๊ฒฝ๋ก ์
๋ ฅ
$ javac Test.java
javac Test.java ๋ฅผ ์คํํด์ฃผ๋ฉด ์๋์ ๊ฐ์ด ์ปดํ์ผ์ด ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์คํํ๋ ๋ฐฉ๋ฒ
- ์คํํ๋ ๋ฒ์ ๋ช ๋ น์ด java Test ๋ก ์คํ
$ java Test
๋ฐ์ดํธ์ฝ๋๋ ๋ฌด์์ธ๊ฐ
๋ฐ์ดํธ์ฝ๋ ๋?
์๋๋ ์๋ฐ ํ๋ก๊ทธ๋จ ์คํ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ ๋ชจ์ต์ด๋ค.
- ์๋ฐ ๋ฐ์ดํธ ์ฝ๋( Java bytecode )๋ JVM์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ณํ๋ ์๋ฐ ์์ค ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋๋ ์ฝ๋์ ๋ช ๋ น์ด ํฌ๊ธฐ๊ฐ 1๋ฐ์ดํธ๋ผ์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ผ๊ณ ๋ถ๋ฆฌ๊ณ ์์ต๋๋ค.
- ์ด๋ฌํ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋์ ํ์ฅ์๋ .class ์ ๋๋ค.
- ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ ์๋ฐ ๊ฐ์ ๋จธ์ ๋ง ์ค์น๋์ด ์์ผ๋ฉด, ์ด๋ค ์ด์์ฒด์ ์์๋ผ๋ ์คํ๋ ์ ์์ต๋๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ํ๋์ง
Interpreter ๋ฐฉ์ : JVM์ด ์ต์ด ๋ฒ์ ์ ์ฌ์ฉ. Bytecode๋ฅผ ํ ๋ผ์ธ์ฉ ์ฝ๊ณ ํด์ํ์ฌ ์คํํ๋ ๋ฐฉ์. (์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ )
์๋ฐ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ๋ฒ ์ปดํ์ผ ํ๊ณ , ๋ ๊ทธ ๋ฐ์ดํธ์ฝ๋๋ฅผ Interpreter๋ก ์ฝ๊ณ ํด์ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ค. ํ์ง๋ง, Interpreter ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ์ฝ๋ ํ์ค ํ์ค ์ฝ๊ณ ํด์ํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆด์ ๋ฐ์ ์๋ค.
๊ทธ๋์ ๋ฑ์ฅํ ๋ฐฉ์. JIT Compiler
JIT ์ปดํ์ผ๋ฌ ๋ Just In Time์ ์ฝ์๋ก, Interpreter ๋ฐฉ์์ ๋จ์ ์ ๋ณด์ํด์ ๋ฑ์ฅํ ์ปดํ์ผ๋ฌ ๋ฐฉ์์ด๋ค.
Bytecode๋ฅผ JIT Compiler ๋ฅผ ํตํด ์ด์ ๋ธ๋ฌ ๊ฐ์ Native Code๋ก ๋ณ๊ฒฝ๋์ด ์ํ์คํ ์๋๋ ๋นจ๋ผ์ก์ง๋ง ์ด์ ๋ธ๋ฌ ์ฝ๋๋ก ๋ณ๊ฒฝํ๋๋ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
์ด์ ๋ธ๋ฌ๋ก ๋ณํํ๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง์ง๋ง ์ด์ ๋ธ๋ฌ ์ฝ๋๋ก ๋ณํํ๋๋ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ์ด ๋๋ฌธ์ ๋ฐ๋ณต ์ํ์ด ๋ฐ์ํ์ง ์์ผ๋ฉด interpreter ๋ฐฉ์์ด ๋น ๋ฅด๋ค.
์ด ๊ฐ์ ์ด์ ๋๋ฌธ์ JVM์ ๋ชจ๋ ์ฝ๋๋ฅผ JIT Compiler ๋ฐฉ์์ผ๋ก ์คํํ์ง ์๊ณ Interpreter ๋ฐฉ์์ ์ฌ์ฉํ๋ค ์ผ์ ํ ๊ธฐ์ค์ด ๋์ด๊ฐ๋ฉด JIT Compiler ๋ฐฉ์์ผ๋ก ์คํํ๋ค.
์๋๋ ์ปดํ์ผ๋ฌ ๋์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
- ์๋ฐ๋ Interpreter ๋ฐฉ์์ผ๋ก ์คํํ๋ค๊ฐ ์ ์ ํ ์์ ์ JIT Compiler ๊ฐ ๋ฐ์ดํธ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋(๊ธฐ๊ณ์ด)๋ก ๋ณ๊ฒฝํ๊ณ ์ดํ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋(๊ธฐ๊ณ์ด)๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค.
- ๋ค์ดํฐ๋ธ ์ฝ๋๋ ์ปดํ์ผํ ๋ ์บ์์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์ปดํ์ผ๋ ์ฝ๋๋ ๋น ๋ฅด๊ฒ ์ํํ๊ฒ ๋จ
- JIT์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ ๊ณผ์ ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ํ ๋ฒ๋ง ์คํ๋๋ ์ฝ๋๋ผ๋ฉด ์ปดํ์ผํ์ง ์๊ณ Interpreter ํ๋ ๊ฒ์ด ๋์
- JIT ์ปดํ์ผ๋ฌ ๋ฅผ ์ฌ์ฉํ๋ JVM์ ๋ด๋ถ์ ์ผ๋ก ํด๋น ๋ฉ์๋๊ฐ ์ผ๋ง๋ ์์ฃผ ์ํ๋๋์ง ์ฒดํฌํ๊ณ ์ผ์ ์ ๋๋ฅผ ๋์ ๋๋ง ์ปดํ์ผ์ ์ํ
JVM ๊ตฌ์ฑ์์
JVM์ ๊ตฌ์กฐ
- Java Source : ์ฌ์ฉ์๊ฐ ์์ฑํ JAVA ์ฝ๋
- Java Compilerใ: JAVA ์ฝ๋๋ฅผ Byte Code ๋ก ๋ณํ์์ผ์ฃผ๋ ๊ธฐ๋ฅ
- Class Loader :ใClassํ์ผ์ ๋ฉ๋ชจ๋ฆฌ(Runtime Data Area)์ ์ ์ฌํ๋ ๊ธฐ๋ฅ
- Execution Engine : Load ๋ .class ์ Byte Code ๋ฅผ ์คํํ๋ Runtime Module
- Gabage Collector : ๊ฐ๋น์ง๋ '์ ๋ฆฌ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ', '์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์'๋ฅผ ๋งํ๋ค. ์ด๊ฒ์ Heap Memory์์ ๋ฐ๊ฒฌํด ์์ ์ฃผ๋ ์ญํ ์ ํ๋ค.
- Runtime Data Area : ํ๋ก๊ทธ๋จ์ ์ํํ๊ธฐ ์ํด OS์์ ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
JVM ์คํ ๊ณผ์
- ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ์๋ฐ์ฝ๋๊ฐ ํด๋์คํ์ผ๋ก ์ปดํ์ผ๋ ํ ํด๋์ค๋ก๋๋ก ํด๋น ํด๋์ค ํ์ผ๋ค์ ๋ก๋ ์ํจ๋ค.
- ๋ก๋ฉ๋ classํ์ผ์ Execution Engine ์ ํตํด ํด์๋๋ค.
- ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ๋ผ์ธ์ฉ ์ฝ๊ณ ํด์ํ์ฌ ์คํํ๋ ๋ฐฉ์์ธ Interpreter (์๋๊ฐ ๋๋ฆผ) ๋ฐฉ์๊ณผ, Interpreter ๋ฐฉ์์ ๋จ์ ์ ๋ณด์ํด ๋ฑ์ฅํ๋ ๊ฒ์ด JIT(just in time) Compiler ๋ฐฉ์์ด๋ค.
- - ๋ฐ์ดํธ์ฝ๋๋ฅผ JIT Compiler๋ฅผ ํตํด ์ด์ ๋ธ๋ฌ ๊ฐ์ Native Code๋ก ๋ณ๊ฒฝ๋์ด ์ํ
- - ์คํ์๋๋ ๋นจ๋ผ์ก์ง๋ง ์ด์ ๋ธ๋ฌ ์ฝ๋๋ก ๋ณ๊ฒฝํ๋๋ฐ ๋น์ฉ์ด ๋ฐ์ํจ.
- - ์ด์ ๋ธ๋ฌ๋ก ๋ณํํ๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง์ง๋ง ์ด์ ๋ธ๋ฌ ์ฝ๋๋ก ๋ณํํ๋๋ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ์ด ๋๋ฌธ์ ๋ฐ๋ณต ์ํ์ด ๋ฐ์ํ์ง ์์ผ๋ฉด Interpreter ๋ฐฉ์์ด ๋น ๋ฅด๋ค.
- JVM์ ๋ชจ๋ ์ฝ๋๋ฅผ JIT Compiler ๋ฐฉ์์ผ๋ก ์คํํ์ง ์๊ณ Interpreter ๋ฐฉ์์ ์ฌ์ฉํ๋ค ์ผ์ ํ ๊ธฐ์ค์ด ๋์ด๊ฐ๋ฉด JIT Compiler ๋ฐฉ์์ผ๋ก ์คํํ๋ค.
- ์ดํ ๋ก๋ฉ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํ์์ง์ ์ด์ฉํ์ฌ ํด์(Interpret)ํ์ฌ Runtime Data Areas ( ์๋์์ ์์ธํ ๋ค๋ฃจ๊ฒ ์.) ์ ๋ฐฐ์น์ํจ๋ค.
ํด๋์ค ๋ก๋๋?
ํ์ผ ํํ๋ก ์กด์ฌํ๋ class๋ฅผ Runtime Memory์ Type์ผ๋ก ๋ง๋๋ ์์
์ Class Loader Work๋ผ๊ณ ํ๋ค.
Class Loader Work ๋ Loading, Linking, Initializaion ์ธ๊ฐ์ง ๊ณผ์ ์ผ๋ก ๋๋๋ค.
- Loading : Binary ํํ์ Type์ JVM์์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ณผ์
- Linking : Loading๋ Type์ Runtime ์ํ์ Binary Type Data๋ก ๊ตฌ์ฑํ๋ ๊ณผ์ , Linking ์์
์ ๋ Verification, Preparation, Resolution์ผ๋ก ๋๋๋ค.
- Verification : JVM์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ํํ(Java Language ๋ฌธ๋ฒ์ ์ด๊ธ๋จ์ด ์๋์ง)์ธ์ง ๊ฒ์ฆ
- Preparation : Type์ด ํ์๋ก ํ๋ Memory๋ฅผ ํ ๋นํด ์ฃผ๋ ์์
- Resolution : ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ๋ ์์
(Constant Pool์ Symbolic Reference๋ฅผ Direct Reference)
- Initialization : Class ๋ณ์๋ฅผ ์ ์ ํ ๊ฐ์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๋ ๊ณผ์ . ์ด ๊ณผ์ ๊น์ง ์๋ฃ๋์ด์ผ Application์์ class๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ๋๋ค.
- Loading๊ณผ Linking ๊ณผ์ ์ ์ํํ๋ ๋ฐฉ์์๋ Eager ๋ฐฉ์๊ณผ Lazy ๋ฐฉ์์ด ์๋ค.
- Eager ๋ฐฉ์ : JVM์ด ๊ธฐ๋ํ ๋ Application๊ณผ Application์ ๊ด๋ จ๋ Class๋ฅผ ๋ชจ๋ Loading๊ณผ Linkingํ๋ ๋ฐฉ์
- Lazy ๋ฐฉ์ : First Actual Use ๋ ํ๋์ฉ Loading, Linking์ ์ํ (๋๋ถ๋ถ Lazy ์ฌ์ฉ)
- Eager ๋ฐฉ์ : JVM์ด ๊ธฐ๋ํ ๋ Application๊ณผ Application์ ๊ด๋ จ๋ Class๋ฅผ ๋ชจ๋ Loading๊ณผ Linkingํ๋ ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ( Runtime Data Areas )
Runtime Data Areas ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ 5๊ฐ์ง๋ก ๊ตฌ์ฑ๋๋ค.
- Method Area (= Class Area = Static Area)
- ํด๋์ค ์ ๋ณด๋ฅผ ์ฒ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ๋ฆด ๋ ์ด๊ธฐํ ๋๋ ๋์์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- ๋ชจ๋ Thread๊ฐ ๊ณต์ ํ๋ค.
- ํด๋์ค, ๋ณ์, Method, static ๋ณ์, ์์ ์ ๋ณด ๋ฑ์ด ์ ์ฅ๋๋ ์์ญ์ด๋ค.
- Field Information : ๋ฉค๋ฒ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์ , ์ ๊ทผ ์ ์ด์์ ๋ํ ์ ๋ณด
- Method Information : ๋ฉ์๋์ ์ด๋ฆ, ๋ฆฌํด ํ์ , ๋งค๊ฐ๋ณ์, ์ ๊ทผ ์ ์ด์์ ๋ํ ์ ๋ณด
- Type Information : Type์ ์์ฑ์ด Class์ธ์ง Interface์ธ์ง์ ์ฌ๋ถ ์ ์ฅ
- ์์ ํ(Constant Pool) : ๋ฌธ์ ์์, ํ์
, ํ๋, Method์ symbolic reference
(๊ฐ์ฒด ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ)๋ ์ ์ฅ - Static ๋ณ์(Class Variable) : ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ ์ ์๊ณ , ๊ฐ์ฒด ์์ฑ ์์ด ์ ๊ทผ ๊ฐ๋ฅ
- Class ์ฌ์ฉ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น : final class ๋ณ์์ ๊ฒฝ์ฐ -> (์์๋ก ์นํ๋์ด) ์์ ํ์ ๊ฐ ๋ณต์ฌ
- Heap Area
- ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ.(๋ชจ๋ Thread๊ฐ ๊ณต์ )
- new ์ฐ์ฐ์๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค. (class Area ์์ญ์ ์ฌ๋ผ์จ ํด๋์ค๋ค๋ง ๊ฐ์ฒด๋ก ์์ฑ ๊ฐ๋ฅ!)
- Gabage Collection ์ด์๋ ์ด ์์ญ์์ ์ผ์ด๋๋ค.
- Heap ์์ญ์ Young Generation, Old Generation, Permanent Generation ์ผ๋ก ๊ตฌ์ฑ๋๋๋ฐ ์์ธํ๊ฒ๋ ์๋ค๋ฃจ๊ฒ ๋ค.
- ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ.(๋ชจ๋ Thread๊ฐ ๊ณต์ )
- Stack Area
- ๋ฉ์๋ ๋ด์์ ์ฌ์ฉ๋๋ ๊ฐ๋ค(๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ฆฌํด๊ฐ ๋ฑ)์ด ์ ์ฅ๋๋ ๊ตฌ์ญ์ผ๋ก ๋ฉ์๋ ํธ์ถ ์๋ง๋ค ๊ฐ๊ฐ์ ๋ฉ์๋๋ง๋ค ์คํํ๋ ์(๊ฐ ๋ฉ์๋๋ฅผ ์ํ ๊ณต๊ฐ)์ด ์์ฑ์ด ๋๋ค.
- LIFO (Last In First Out)์ ์ค์ํ๋ฉฐ, ๋ฉ์๋๋ฅผ ๋น ์ ธ๋๊ฐ๋ฉด(์ํ์ด ๋๋๋ฉด) ํด๋น ์คํํ๋ ์์ LIFO๋ฅผ ์งํค๋ฉฐ ์๋ฉธ์ด ๋๋ค.
- PC Register
- Thread๊ฐ ์์ฑ ๋ ๋๋ง๋ค ์์ฑ๋๋ ๊ณต๊ฐ
- ํ์ฌ Thread๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น๊ณผ ์ ์ฅ
- Native Method Stack
- ์๋ฐ์ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ
JDK์ JRE์ ์ฐจ์ด
JRE (Java Runtime Environment) ์๋ฐ ๋ฐํ์(์คํ) ํ๊ฒฝ
JRE๋ ๋ง ๊ทธ๋๋ก ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ํ์์ ์ธ ์ปดํฌ๋ํธ๋ค์ ์ ๊ณตํ๋ค. (๊ทธ๋ฌ๋ ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋ค.)
JVM (Java Virtual Machine), Java ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ํจํค์ง๋ฅผ ์ ๊ณตํ๋ค.
JDK (Java Development Kit) ์๋ฐ ๊ฐ๋ฐ ํคํธ ( JRE์ ์์ ์งํฉ / JDK > JRE > JVM )
JDK๋ ๋ง ๊ทธ๋๋ก ์๋ฐ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด ํ์ํ ๊ธฐ๋ฅ(javac, java ๋ฑ) ๋ค์ ์ ๊ณตํ๋ค.
JRE = JVM + JAVA ํจํค์ง ํด๋์ค (java.util , java.Math, java.lang , java.awt , java.Swing ๋ฑ) + ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
JDK = JRE + ๊ฐ๋ฐ/๋๋ฒ๊น ํด (javac, java ๋ฑ)
REFERENCES
huelet.tistory.com/entry/JVM-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0
velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0
catch-me-java.tistory.com/11?category=438116