JIT ์ปดํ์ผ๋ฌ?
- ์๋ฐ ํ์ผ(.java)์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ํด๋์ค ํ์ผ(.class/๋ฐ์ดํธ์ฝ๋)๋ก ๋ง๋ ๋ค.
- ์ดํ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ JVM์ด ์ฝ๊ณ ์คํํ๋ค.
์๋ฐ ๋ฐ์ดํธ ์ฝ๋
JVM์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ณํ๋๋ ์๋ฐ ์์ค ์ฝ๋ ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋๋ ์ฝ๋์ ๋ช ๋ น์ด ํฌ๊ธฐ๊ฐ 1 ๋ฐ์ดํธ์ฌ์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ผ ํ๋ค. ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ ์๋ฐ ๊ฐ์ ๋จธ์ ๋ง ์ค์น๋์ด ์์ผ๋ฉด, ์ด๋ค ์ด์์ฒด์ ์์๋ ์คํ๋ ์ ์๋ค.
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ ๋ชจ๋ ๊ณ ์์ค ์ธ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ์ํจ๋ค.
์ปดํ์ผ๋ฌ๋ ์์ค์ฝ๋ ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ฒ์ญํ์ฌ ๋ชฉ์ ํ์ผ๋ก ๋ง๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ๋ฐฉ์์ด๋ค.
์ธํฐํ๋ฆฌํฐ๋ ์์ค์ฝ๋๋ฅผ ํ ํ์ฉ ์ค๊ฐ ์ฝ๋๋ก ๋ฒ์ญ ํ ์คํํ๋ค.
์ปดํ์ผ๋ฌ
- ์ปดํ์ผ์ด ์๋ฃ๋ ์คํ ํ์ผ์ ์ปดํจํฐ์์ ๋น ๋ฅด๊ฒ ์คํํ ์ ์์ด ํจ์จ์ ์ด๋ค.
- ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ๋๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์ ์ถ๋์ง์๋๋ค.
- ์ปดํ์ผ ์๋ฌ์ ๊ด๋ จ๋ ์๋ฌ๋ฅผ ์ด๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
- ์ฝ๋ ์์ ์ ๋ค์ ์ปดํ์ผ ํด์ผ ํ๋ค.
- ์ปดํ์ผ ์๊ฐ์ด ๋น๊ต์ ๋๋ฆฌ๋ฉฐ, ์์ ์ด ๋น๋ฒํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ธํฐํ๋ฆฌํฐ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์์คํ ๊ฐ ์ด์์ฑ์ด ์ข๋ค.
- ์ ์ฒด ์ฝ๋๋ฅผ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์์ ์ ์ฉ์ดํ๋ค.
- ๋งค๋ฒ ๋ฒ์ญ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ ์คํ ์๋๊ฐ ๋๋ ค ์ปดํ์ผ๋ฌ์ ๋นํด ๋๋ฆฌ๋ค.
- ์ค๊ฐ ์ฝ๋๋ก ํด์๋๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ถ๋ ์ ์๋ค.
์๋ฐ ์ฝ๋๋ฅผ ์คํํ๋ ๊ณผ์
-
์๋ฐ ํ์ผ์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ๋ฐ์ดํธ์ฝ๋ ํ์ผ๋ก ์ปดํ์ผ ํ๋ค. ์๋ฐ ์ปดํ์ผ๋ฌ๋ ์๋ฐ ์์ค์ฝ๋๋ฅผ JVM์ ์ํ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ค.
-
JVM์ ์คํ ์์ง ๋ด์ ์๋ ์๋ฐ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํน์ ํ๊ฒฝ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ์คํํ๋ค.
์๋ฐ๋ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ๋ ๊ณผ์ ๊ณผ, ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค. ์ฆ, ์ปดํ์ผ ๊ณผ์ ๋ง ํ์ํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณด๋ค ๋๋ฆฌ๋ค.
๊ฑฐ๊ธฐ์ ๋ํ์ฌ ์ธํฐํ๋ฆฌํฐ๋ ์ปดํ์ผ๋ฌ๋ณด๋ค ์๋๊ฐ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด JIT ์ปดํ์ผ๋ฌ์ด๋ค.
JIT ์ปดํ์ผ์ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณผ์ ์ ์ค์๊ฐ์ผ๋ก ์ผ์ด๋๋ฉฐ(๊ทธ๋์ Just-In-Time์ด๋ค), ์ ์ฒด ์ฝ๋์ ํ์ํ ๋ถ๋ถ๋ง ๋ณํํ๋ค. ๊ธฐ๊ณ์ด๋ก ๋ณํ๋ ์ฝ๋๋ ์บ์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ ์ ์ปดํ์ผ์ ๋ค์ ํ ํ์๊ฐ ์๋ค.
Just-In-Time ์ปดํ์ผ๋ฌ
Java์ ๊ฐ์ JVM ๊ธฐ๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ์ปดํ์ผ๋ฌ๋ก, ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ์ปดํ์ผ ๊ธฐ๋ฒ
๊ธฐ๊ณ์ด๋ก ๋ณํ๋ ์ฝ๋๋ฅผ ์บ์์ ์ ์ฅํ ํ ์ฌ์ฌ์ฉ์ ์ปดํ์ผ์ ๋ค์ ํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ข๋ค.
ํ์ง๋ง ๋ชจ๋ ์ฝ๋๋ค์ ์บ์ํ๋๊ฑด ์๋๋ค. JVM์ ๋ด๋ถ์์ ์์ฃผ ์ํ๋๋ ์ฝ๋๋ค์ ์ ๋ณํ์ฌ ์บ์ ๊ณต๊ฐ์ ๋ฃ์ด ๋๋ค.
์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๋ณํ ๊น?
1. ํ๋กํ์ผ๋ง
JVM์ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฉ์ฏ๋์ ํธ์ถ ๋น๋, ์คํ ์๊ฐ์ ๋ชจ๋ํฐ๋งํ๋ค.
์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก JVM์ ์ด๋ค ๋ฉ์๋๊ฐ ํซ์คํ ๋ฉ์๋์ธ์ง ํ๋จํ๋ค.
2. ์๊ณ๊ฐ ์ค์
JVM์ ํน์ ์๊ณ๊ฐ์ ์ค์ ํ๊ณ , ๋ฉ์๋ ํธ์ถ ๋น๋๊ฐ ์๊ณ๊ฐ์ ๋๋ ๊ฒฝ์ฐ ํด๋น ์ฝ๋๋ฅผ JIT ์ปดํ์ผ ๋์์ผ๋ก ์ ์ ํ๋ค.
์๊ณ๊ฐ์ JVM์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
3. JIT ์ปดํ์ผ
ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ์ ์๊ณ๊ฐ์ ๋ฐํ์ผ๋ก, JVM์ ํซ์คํ ๋ฉ์๋๋ฅผ JIT ์ปดํ์ผ ํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํ๋ค. JIT ์ปดํ์ผ๋ฌ๋ ์ด ๋ฉ์๋๋ฅผ ์ต์ ํํ์ฌ ๋ค์ ์คํ ์ ์ฑ๋ฅ์ด ํฅ์๋๋๋ก ํฉ๋๋ค.
4. ์บ์ฑ
JIT ์ปดํ์ผ๋ฌ๋ ์ปดํ์ผ๋ ๋ฉ์๋๋ฅผ ์บ์์ ์ ์ฅํ๋ค.
๊ทธ ํ ๋์ผํ ๋ฉ์๋๊ฐ ๋ค์์ ํธ์ถ๋ ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
์บ์๋ ๋ฉ์๋์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ ์ฅํ๊ณ , ํ์ํ ๋ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
5. ์ค์ผ์ค๋ง
JIT ์ปดํ์ผ์ CPU ์์๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ณ ๋ คํ์ฌ ์คํ๋๋ค.
๋ฉ์๋ ํธ์ถ๋น๋๊ฐ ๋์ ๊ฒฝ์ฐ JIT ์ปดํ์ผ ์ฐ์ ์์๋ฅผ ๋์ฌ, ๋ง์ด ํธ์ถ๋๋ ๋ฉ์๋์ผ์๋ก ์๋ฆฌ ์ต์ ํํ๋ ค๊ณ ํ๋ค.
ํ์ง๋ง CPU ์ฌ์ฉ๋์ด ๋๋ค๋ฉด, JIT ์ปดํ์ผ์ ๋ฆ์ถ๊ฑฐ๋ ์ ํํ ์ ์์ต๋๋ค.
CPU ๋ถํ๊ฐ ๋ฎ์ ์์ ์ ์ปดํ์ผ ์์
์ด ์ํ๋ ์ ์๋๋ก ํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฒด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ๋ค.
6. ์ ์ฑ ์กฐ์
JVM์ ๋ค์ํ ์ ์ฑ ์ ํตํด ํซ์คํ ๋ฉ์๋๋ฅผ ์ต์ ํํ ์ ์๋ค. ํน์ ๋ฉ์๋์ ํธ์ถ ๋น๋๊ฐ ๊ธ์ฆํ๋ฉด JVM์ ํด๋น ๋ฉ์๋์ ๋ํด ์ถ๊ฐ ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์๋ค.
ํ๋กํ์ผ๋ง๊ณผ ์๊ณ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํซ์คํ์ ์ ์ ํ์ฌ ์บ์ฑํ๋ค.
ํธ์ถ ๋น๋์ ์คํ ์๊ฐ์ ๋ชจ๋ํฐ๋งํ์ฌ, ์์ฃผ ํธ์ถ๋๊ฑฐ๋ ์ฑ๋ฅ์ด ์ค์ํ ๋ฉ์๋์ ๋ํด JIT ์ปดํ์ผ๊ณผ ์บ์ฑ์ ์ํํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฅผ ํตํด ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , ์คํ ์๋๋ฅผ ํฅ์ ์ํฌ ์ ์๋ค.
C1, C2
์ค์ ๋ก JVM์ JIT ์ปดํ์ผ๋ฌ ๋ด๋ถ์๋ 2๊ฐ์ง ์ปดํ์ผ๋ฌ์ธ C1์ปดํ์ผ๋ฌ์ C2์ปดํ์ผ๋ฌ๊ฐ ์๋ค. C1์ level1~3, C2๋ level4๋ฅผ ๋ด๋นํ๋ค.
C1 - Client Compiler
๋น ๋ฅธ ์์ ์๊ฐ์ ๋ชฉํ๋ก ์ค๊ณ๋ Client ๋ชจ๋์์ ๋์ํ๋ JIT ์ปดํ์ผ๋ฌ์ด๋ค.
๊ฐ๋จํ ์ต์ ํ๋ฅผ ์ํํ๋ฉฐ, ๋ณต์กํ ์ต์ ํ๋ ์ ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ปดํ์ผ์ ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆฐ๋ค.
์๋ฒ ์ดํ๋ฆฌ์ผ์ด์
๋ณด๋ค๋ ๋ฐ์คํฌํ ์ดํ๋ฆฌ์ผ์ด์
,
GUI ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ๊ฐ์ ์งง์ ์คํ ์๊ฐ๊ณผ ๋น ๋ฅธ ์๋ต์๋๊ฐ ์ค์ํ ํ๋ก๊ทธ๋จ์ ์ ํฉํ๋ค.
- ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ๋ฐ๋ก ์คํํ ์ ์๋ค.
- ์ธ๋ผ์ธ, dead code elimination, ๋ฃจํ ์ต์ ํ๋ฑ ๊ธฐ๋ณธ ์ต์ ํ ์์ ๋ง ์ํํ๋ค.
- ์ต์ ํ๋ฅผ ๊ฐ๋จํ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ด ๋น ๋ฅด๊ฒ ์์ํ ์ ์๋ค.
C2 - Server Compiler
์๋ฒ ๋ชจ๋์์ฏ ๋์ํ๋ฉฐ, ๊ณ ์ฑ๋ฅ์ ๋ชฉํ๋ก ๋ณต์กํ ์ต์ ํ๋ฅผ ์ํํ๋ JIT ์ปดํ์ผ๋ฌ์ด๋ค.
์์ ์๊ฐ์ ๋๋ฆฌ์ง๋ง, ์ฅ๊ธฐ ์คํ ํ๋ก๊ทธ๋จ์ ๋ ์ ํฉํ ์ปดํ์ผ๋ฌ๋ก, ์ฑ๋ฅ์ด ์ค์ํ ์๋ฒ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- ๋ณต์กํ ๋ฃจํ ์ ํ, ์ธ๋ผ์ธ ํ์ , ํ์ถ ๋ถ์ ๋ฑ ๊ณ ๊ธ ์ต์ ํ๋ฅผ ์ํํ์ฌ ์ฑ๋ฅ์ ๊ทน๋ํํ๋ค.
- ๊ณ ๊ธ ์ต์ ํ๋ฅผ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๊ฐ์ด ์๋์ ์ผ๋ก ๊ธธ๋ฉฐ, ํ๋ก๊ทธ๋จ ์์ ์์ ์์๋ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
- ์ต์ ํ๋ ์ฝ๋๋ก ์ธํด CPU, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ธ๋ค.
Tiered Compilation (๊ณ์ธต์ ์ปดํ์ผ)
C1, C2 ์ปดํ์ผ๋ฌ์ ์ฅ์ ์ ๊ฒฐํฉํ JVM ์ปดํ์ผ ์ ๋ต์ด๋ค.
C1 ์ปดํ์ผ๋ฌ๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ์คํํ๊ณ , ํ๋ก๊ทธ๋จ์ด ๋ ์ค๋ ์คํ๋๋ฉด,
C2 ์ปดํ์ผ๋ฌ๋ก ๊ณ ๊ธ ์ต์ ํ๋ฅผ ์ํํ๋ค.
ํน์ง
1. ์ฑ๋ฅ ์ต์ ํ
๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ ๋์ , ์์ฃผ ์คํ๋๋ ์ฝ๋๋ฅผ JIT ์ปดํ์ผ๋ฌ๊ฐ ์ง์ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์คํ๋๋ค. ์ด๋ฅผ ํตํด ์คํ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
2. ๋์ ์ต์ ํ
JIT ์ปดํ์ผ๋ฌ๋ ์คํ ์ค์ ์ฝ๋์ ์ฌ์ฉ ํจํด์ ๋ถ์ํ์ฌ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ
ํ์ํ ๋๋ง ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ ์ ์๋ค.
4. ํธํ์ฑ ์ ์ง
๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ AOT(Ahead-of-Time) ์ปดํ์ผ๋ฌ์ ๋ฌ๋ฆฌ, JIT๋
๋ฐ์ดํธ ์ฝ๋ ์ํ๋ก ์ ์งํ๋ค๊ฐ ์คํ ์์ ์ ํ์ํ ๋ถ๋ถ์ ๋ณํํ๋ค.
์ด๋ฅผ ํตํด ๋ค์ํ ํ๋ซํผ์์ ๋์ผํ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ JVM์ ์ด์์ฑ์ ์ ์งํ๋ฉด์
์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
AOT ์ปดํ์ผ
ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ๋ฐฉ์
์คํ ์์ ์ ์ถ๊ฐ์ ์ธ ์ปดํ์ผ ์์ ์ด ํ์ํ์ง ์์ ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค.
AOT๋ก ์์ฑ๋ ๊ธฐ๊ณ์ด๋ ํน์ ํ๋ซํผ์์๋ง ์คํ์ด ๊ฐ๋ฅํ๋ค.
ํ๋ซํผ์ ์ข ์์ ์ด๋ฉฐ, ๋ค๋ฅธ ํ๊ฒฝ์์ ์คํํ๋ ค๋ฉด ๋ณ๋๋ก AOT ์ปดํ์ผ ํด์ผ ํ๋ค.
JIT์ ์๋ ๋ฐฉ์
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ํ ์ค์ฉ ํด์ํ๋ฉฐ ์คํํ๋ค.
- ์คํ ์ค, ํน์ ๋ฉ์๋๋ ์ฝ๋ ๋ธ๋ก์ด ์์ฃผ ํธ์ถ๋๋ฉด JIT ์ปดํ์ผ๋ฌ๊ฐ ํด๋น ๋ถ๋ถ์ ๊ฐ์งํ๋ค.
- ๊ทธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ณ ์บ์ฑํ์ฌ, ์ดํ๋ถํฐ๋ ๋ณํ๋ ๊ธฐ๊ณ์ด๋ฅผ ์ฌ์ฉํด ๋ ๋น ๋ฅด ์คํํ๋ค.