์ปดํ์ผ (Compile)
์์ค์ฝ๋๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋ ๊ณผ์ (์ปดํ์ผ๋ฌ javac๊ฐ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํ)
`.java` -> `.class`
๋ฐํ์ (Runtime)
ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ์คํ๋๋ ์๊ฐ
์ปดํ์ผ๋ ๋ฐ์ดํธ ์ฝ๋๊ฐ JVM ์ ์ํด ์คํ๋๋ ์์
์ปดํ์ผ๊ณผ ๋ฐํ์์ ์ฐจ์ด์
์์ | ํ๋ก๊ทธ๋จ ์คํ ์ ์, ์ฝ๋ ์์ฑ ํ ์ปดํ์ผ ์์ ์ ๋ฐ์ | ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ |
๋ชฉ์ | ์์ค ์ฝ๋์ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ํ์ธํ๊ณ , ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ | ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๋์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌ |
์ค๋ฅ ์ฒ๋ฆฌ | ๋ฌธ๋ฒ ์ค๋ฅ, ํ์ ์ค๋ฅ, ์ฒดํฌ ์์ธ ๋ฏธ์ฒ๋ฆฌ ๋ฑ (์ปดํ์ผ ์ ๋ฐ์) | ๋ฐํ์ ์์ธ(๋ฐฐ์ด ์ธ๋ฑ์ค ์ด๊ณผ, null ์ฐธ์กฐ ๋ฑ) (์คํ ์ ๋ฐ์) |
์์ ์ค๋ฅ | ๊ตฌ๋ฌธ ์ค๋ฅ, ํ์ ์ค๋ฅ, ์ฒดํฌ ์์ธ ๋ฏธ์ฒ๋ฆฌ | NullPointerException, ArrayIndexOutOfBoundsException ๋ฑ |
์์ธ ์ฒ๋ฆฌ ๊ฐ์ ์ฌ๋ถ | ์ฒดํฌ ์์ธ๋ ๋ฐ๋์ ์ฒ๋ฆฌํด์ผ ํจ (try-catch ๋๋ throws) | ์์ธ ์ฒ๋ฆฌ ์ฌ๋ถ๊ฐ ๊ฐ์ ๋์ง ์์ (์ธ์ฒดํฌ ์์ธ) |
JVM(Java Virtual Machine) ๊ตฌ์กฐ
ํด๋์ค ๋ก๋(Class Loader)๊ฐ ์ปดํ์ผ๋ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Areas)์ ๋ก๋ํ๊ณ
์คํ ์์ง(Execution Engine)์ด ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ค.
JVM ์ ํฌ๊ฒ 4๊ฐ์ง๋ก ๊ตฌ์ฑ
(1) Class Loader (ํด๋์ค ๋ก๋)
์ปดํ์ผํ์์ด ์๋ ๋ฐํ์์ ํด๋์ค๋ฅผ ์ฒ์์ผ๋ก ์ฐธ์กฐํ ๋ ํด๋น ํด๋์ค๋ฅผ ๋ก๋ํ๊ณ ๋งํฌํ๋ค. (= ๋์ ๋ก๋)
๋์ ๋ก๋๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ์ด๋ค.
* ๋์ ๋ก๋
ํ๋ก๊ทธ๋จ์ด ์คํ ์ค (๋ฐํ์)์ ํด๋์ค, ๋ฉ์๋, ๋ฆฌ์์ค ๋ฑ์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ฑฐ๋ ํธ์ถํ๋ ๊ฒ
(์ ์ ๋ก๋๋ ์ปดํ์ผ ํ ๋ ๋ก๋๋จ)
(2) Runtime Data Area (๋ฐํ์ ๋ฐ์ดํฐ ์์ญ)
JVM ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ํด์ ์คํ๋๋ฉด์ ํ ๋น ๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
6๊ฐ์ ์์ญ์ผ๋ก ๋๋ ์ ์์
(3) Execution Engine (์คํ ์์ง)
ํด๋์ค ๋ก๋๋ฅผ ํตํด JVM ๋ด ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ๋ฐฐ์น๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํจ
๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค ( CPU ๋์๊ณผ ์ ์ฌ )
* ์ธํฐํ๋ฆฌํฐ
๋ฐ์ดํธ ์ฝ๋ ์ธ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์ฝ์ด์ ํด์ํ๊ณ ์คํํ๊ธฐ ๋๋ฌธ์ ํ๋ํ๋์ ํด์์ ๋น ๋ฅด์ง๋ง ๊ฒฐ๊ณผ๊น์ง์ ์คํ์ ๋๋ฆฌ๋ค.
* JIT (Just-In-Time) ์ปดํ์ผ๋ฌ
๋ฐํ์ ์์ / ์ธํฐํ๋ฆฌํฐ ๋จ์ ์ ๋ณด์, ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํ ํ ์ ์ ํ ์์ ์ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผ ํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณ๊ฒฝ ํ ๋์ด์ ์ธํฐํ๋ฆฌ์ง ์์ด ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์
(๋ค์ดํฐ๋ธ ์ฝ๋๋ ์บ์์ ๋ณด๊ด๋์ด์, ํ ๋ฒ ์ปดํ์ผ ๋ ์ฝ๋๋ ๊ณ์ ๋น ๋ฅด๊ฒ ์ํ๋ ์ ์๊ฒ๋จ
JIT ์ปดํ์ผ ๋ฐฉ์์ ์ธํฐํ๋ฆฌํ ๋ณด๋ค ์ค๋๊ฑธ๋ฆฐ๋ค. ํ๋ฒ ์คํ์ ์ํ ์ฝ๋์ด๋ฉด ์ธํฐํ๋ฆฌํฐ๊ฐ ํจ์จ์ ์ด๋ค.
JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ JVM ์ ๋ฉ์๋์ ์ํ ์ ๋๋ฅผ ์ฒดํฌํ๊ณ ์ผ์ ์ ๋๊ฐ ๋์ ๋์๋ง ์ปดํ์ผ์ ์ํํ๋ค. )
(JAVA , .NET Framework, JavaScript ์์ ์ฌ์ฉ๋จ)
(+) ๋ค์ดํฐ๋ธ ์ปดํ์ผ๋ฌ
์ปดํ์ผ(๋น๋) ์์ / ์์ค ์ฝ๋๋ฅผ ์ง์ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ์คํํจ, ๋ฐ์ดํธ ์ฝ๋ ์์ด ๋ค์ด๋ ํธ๋ก ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ์คํ ์๋๋ฅผ ๊ทน๋ํ ํ๋ค. ํ์ง๋ง ํ๋ซํผ์ ์ข ์์ ์ด๋ค. ํน์ ์ด์์ฒด์ ์์๋ง ์คํ ๊ฐ๋ฅํจ
( C, C++, Rust , Go ์์ ์ฌ์ฉ๋จ)
(4) Garbage Collector
- Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด๋ค ์ค ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ ์ญํ ์ ํจ.
- GC์ ๋ฐ์์ ์ ํด์ ธ์์ง ์์์ ์ธ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฆฌํ๋์ง ์ ์ ์๋ค.
- ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ๋งค๋ชจ๋ฆฌ ํด์ ๋ฅผ ํ ์ ์์
1. ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง : ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ์ ํ, ๋น์ ์ ์ข ๋ฃ ๋ฑ ๋ฐฉ์ง
2. ์์ ์ฑ ์ฆ๊ฐ : ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฐฉ์ง.
3. ์์ฐ์ฑ ํฅ์ : ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฝ๋ ์์ฑ ๋ถํ์.
https://d2.naver.com/helloworld/1230
https://blog.naver.com/rokey_89/221658053244
https://f-lab.kr/insight/java-compilation-process-jvm-20240806