๐ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ ์ปดํจํฐ
์ฆ, ์ปดํจํฐ(์๋์ฐ, ๋งฅ, ๋ฆฌ๋ ์ค)๊ฐ ๋ค ๋ฌ๋ผ๋, JVM ์์์๋ผ๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋๊ฐ์ด ์คํ๋๋ค.
โก๏ธ ๊ทธ๋์ ์๋ฐ์ ์ ๋ช
ํ ์ฌ๋ก๊ฑด
"Write Once, Run Anywhere" (ํ ๋ฒ ์์ฑํ๋ฉด ์ด๋์๋ ์คํ)
์ด๊ฒ ๊ฐ๋ฅํ ๊ฒ ๋ฐ๋ก JVM ๋๋ถ์ด๋ค! ๐
.java
โ javac
โ .class
(๋ฐ์ดํธ์ฝ๋) ๋ณํโ๏ธ ๋ฐ์ดํธ์ฝ๋: JVM๋ง ์์๋ฃ๋ ์ค๊ฐ ์ธ์ด
.class
ํ์ผ์ JVM ์์ผ๋ก ๊ฐ์ ธ์ดโ๏ธClassLoader ์ธ ๋จ๊ณ
- Loading
-.class
ํ์ผ์ ์ฝ์ด์ JVM ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ (Method Area).- Linking
- (๊ฒ์ฆ) ๋ฐ์ดํธ์ฝ๋๊ฐ JVM ๊ท์น ์๋ฐ ์๋์ง ์ฒดํฌ
- (์ค๋น) static ๋ณ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๊ธฐ๋ณธ๊ฐ ์ธํ
- (ํด๊ฒฐ) ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํด๋์ค/๋ฉ์๋ ์ฐ๊ฒฐ- Initialization
- static ๋ณ์ ์ด๊ธฐ๊ฐ ํ ๋น
- static ๋ธ๋ก ์คํ
JVM์ ํ๋ก๊ทธ๋จ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒ 5์์ญ์ผ๋ก ๋๋:
new
๋ก ๋ง๋ ๊ฐ์ฒด/๋ฐฐ์ดโ๏ธ Interpreter
- ํ ์ค์ฉ(๋ฐ์ดํธ์ฝ๋ ๋จ์) ํด์ํด์ ์คํ
- ๋น ๋ฅด๊ฒ ์์ ๊ฐ๋ฅํ์ง๋ง, ๋ฐ๋ณต ์คํ๋๋ ์ฝ๋์์ ๋๋ ค์ง
โ๏ธ JIT(Just-In-Time) Compiler
- ์์ฃผ ์คํ๋๋ ์ฝ๋(Hotspot)๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ ์บ์ฑ
- ์ดํ๋ถํฐ๋ ๊ธฐ๊ณ์ด๋ฅผ ๋ฐ๋ก ์คํํ๋๊น ํจ์ฌ ๋น ๋ฆ ๐
- JVM์ ์ธํฐํ๋ฆฌํฐ + JIT ํผํฉ์ผ๋ก ๋์ํจ
โธ๏ธ STOP-THE-WORLD ํ์
: JVM์์ GC(Garbage Collector) ๊ฐ ์คํ๋ ๋ ๋ฐ์ํ๋ ํ์
- GC๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฒญ์ํ๋ ค๋ฉด ํ๋ก๊ทธ๋จ ์คํ์ ์ ์ ๋ฉ์ถฐ์ผ ํจ
- ์ด๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๊ฐ ๋ฉ์ถ๊ณ , GC๋ง ๋์ โ โStop-The-Worldโ
- ๋ฉ์ถ๋ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์๋น์ค ์ง์ฐ, ๋๊น ๊ฐ์ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ
- ๊ทธ๋์ ์ต์ GC๋ค์ (G1, ZGC, Shenandoah ๋ฑ) ๋ฉ์ถ๋ ์๊ฐ์ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ ํจ
.java ์ฝ๋ โ ์ํ ์๋๋ฆฌ์ค
javac ์ปดํ์ผ๋ฌ โ ์๋๋ฆฌ์ค๋ฅผ ์์ด(๋ฐ์ดํธ์ฝ๋)๋ก ๋ฒ์ญ
JVM โ ํต์ญ์ฌ
https://supercoding.notion.site/_DAY1_-_-889893edfcec47ff8e34d08482f33238