๐ ์๋ก
๋ด๊ฐ ์ฝ๋ฉ์ ์ฒซ ๊ฑธ์๋ง๋ฅผ ์ฎ๊ฒผ์ ๋, ๋ด๊ฐ ๊ฐ์ฅ ๋ฐฐ์ฐ๊ณ ์ถ์๋ ์ธ์ด๋ ์๋ฐ์๋ค. ์ด๋ฑํ์๋ ์ ์ผํ๊ฒ ์๊ณ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋๋ฐ, ๋น์ฐํ ๊ทธ ์ด์ ๋ ๋ง์ธํฌ๋ํํธ ๋๋ฌธ์ด๋ค. ๊ทธ๋๋ ๊ทธ๋ ๊ณ , ์ง๊ธ๋ ๊ทธ๋ ๊ณ ์ฌ์ ํ ๋์๊ฒ๋ ํ์์ด ๊น์ ์ธ์ด๋ก ๋จ์์๋ค. ๊ทธ๋์ ์ค๋์ ํด๋น ์๋ฐ์ ๋ํด์ ํ๊ตฌ ํด๋ณผ๋ ค๊ณ ํ๋ค.
โณ ์๋ฐ(Java)
์๋ฐ๋ ๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด๊ฒ JVM(Java Virtual Machine)์์์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ์ด์ฉํด ์ปดํ์ผ์ ์คํํ๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ด๋ค. ๊ทธ๋์ ๋ค๋ฅธ ์ด์์ฒด์ ์์ ์๋ฐ ํ์ผ์ ์คํ ์ํฌ๋ ค๊ณ ํ ๋, ๋ณ๋๋ก ๋ค์ ์ปดํ์ผ์ ํด์ ์คํ ํ์ผ์ ๋ง๋ค ํ์๊ฐ ์๋ ๊ฒ์ด ์๋ฐ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋์ ๋จผ์ , JVM ์์์ ์๋ํ๋ ์๋ฐ์ ์ปดํ์ผ ๊ณผ์ ์ ํ๋ฒ ์์๋ณผ๋ ค๊ณ ํ๋ค.
โณ First
์ ์ผ ๋จผ์ , Java ์ธ์ด๋ก ์ง์ฌ์ง ํ์ผ(*.java) ํ์ผ์ ์ปดํ์ผ์ ํ๋ฉด ๋ช ๋ น์ฝ๋(Opcode)์ ์ถ๊ฐ ํผ์ฐ์ฐ์(Operand)๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํธ์ฝ๋(Byte Code)๋ก ๋ณํ ์ํจ๋ค.(*.class)
๐ฆ ๋ฐ์ดํธ์ฝ๋ :
ํน์ ํ๋์จ์ด๊ฐ ์๋ ๊ฐ์ ์ปดํจํฐ์์ ๋์๊ฐ๋ ์คํ ํ๋ก๊ทธ๋จ์ ์ํ ์ด์ง ํํ๋ฒ
์ฌ๊ธฐ์ ๋ช ๋ น์ฝ๋์ ํผ์ฐ์ฐ์์ ๋ํด ๋ ๊ฐ๋จํ ์์๋ณด์๋ฉด, ๋ช ๋ น์ฝ๋๋ ์ฐ์ฐ์, ์๋ก์ ์ข ๋ฅ ๋ฑ๊ณผ ๊ฐ์ด ๋ช ๋ น์ ๊ธฐ๊ณ์ด๋ก ๋ํ๋ด๋ ๊ฒ์ด๊ณ , ๋ฐ์ดํธ์ฝ๋์์์ ํผ์ฐ์ฐ์๋ ์ฃผ์, ๋ ์ง์คํธ ๋ฑ๊ณผ ๊ฐ์ด ์์น๋ฅผ ํํํ๋ค.
โณ Second
์ด๋ ๊ฒ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๋ *.class ํ์ผ์ ํด๋์ค ๋ก๋(Class Loader)๋ก ์ ๋ฌ์ด ๋๋ค. ํด๋์ค ๋ก๋๋ JVM ์์์ ๋์ํ๊ณ , ํ์ํ ํด๋์ค๋ง ๋ก๋ฉํ๋ ๋์ ๋ก๋ฉ(Dynamic Loading)์ ์ด์ฉํด ์ฌ๋ฌ ํด๋์ค ํ์ผ๋ค์ ๋งํฌํ๊ณ , JVM ์์ ์ ์ฌ์ํจ๋ค.
ํด๋์ค ๋ก๋๋ ์๋์ ๊ฐ์ด ํฌ๊ฒ 3๊ฐ์ง์ ๊ณผ์ ์ ํตํด JVM ์์์ ์๋์ด ๋๋ค.
1. ๋ก๋ฉ(Loading)
๋ก๋ฉ์ ๋ฐ์ดํธ์ฝ๋(*.class)๋ฅผ ์ฝ์ด์ค๊ณ , ์ ์ ํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ค. ๋ํ ๋ฐ์ดํธ์ฝ๋์ ๊ฐ์ข ์ ๋ณด๋ค์ ๋ฉ์๋ ์์ญ์ ์ ์ฅํ๋ค.
2. ๋งํน(Linking)
๊ฒ์ฆ(Verify) : ์ฝ์ ํด๋์ค์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์ ํจํ ๊ฒ์ธ์ง ํ์ธํ๋ค.
์ค๋น(Prepare) : ์ ์ ๋ณ์์ ํด๋์ค์์ ์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ด ๊ธฐ๋ณธ๊ฐ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณดํ๋ค.
๋ถ์(Resolving) : ์ฌ๋ณผ๋ฆญ ๋ํผ๋ฐ์ค๋ฅผ ๋ฉ์๋ ์์ญ์ ์๋ ์ค์ ๋ํผ๋ฐ์ค๋ก ๊ต์ฒดํ๊ณ , ์ ํ์ ์ผ๋ก ์ผ์ด๋๋ ๊ณผ์ ์ด๋ค.
3. ์ด๊ธฐํ(Initialising)
๋งํน ๊ณผ์ ์์ Prepare ๋จ๊ณ์์ ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํด๋์ค ๋ณ์๋ค์ ์ด๊ธฐํ ํด์ค๋ค.
โณ Third
JVM์ ์ฌ๋ผ์ค๊ฒ ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์๋ฐ ์คํ์์ง(Execution Engine)์ด ๋ช ๋ น์ด ๋จ์๋ก ํ๋์ฉ ์ฝ์ด๊ฐ๋ฉฐ ์คํํ๋ค. ์ฌ๊ธฐ์ ์คํ ๋ฐฉ์์ ๋๊ฐ์ง๋ก ๋๋ ์ง ์ ์๋ค.
1. ์ธํฐํ๋ฆฌํฐ(Interpreter)
๋ฐ์ดํธ์ฝ๋๋ฅผ ํ๋์ฉ ์ฝ์ด๊ฐ๋ฉฐ ํด์ํด ์คํํ๋ ๋ฐฉ์์ด๋ค. ํ๋์ฉ ์ฝ์ด๊ฐ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ ์คํํ๋ ๋ฐฉ์์ ๋นํด ์๋์ ์ผ๋ก ์๋๊ฐ ๋๋ฆฌ๋ค.
2. JIT(Just In Time) ์ปดํ์ผ๋ฌ
์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์์์ผ์ฃผ๋ ์คํ ๋ฐฉ์์ด๋ค. ์์ฃผ ์ฐ๋ ๋ฐ์ดํธ์ฝ๋ ์์ญ์ ๋ฐํ์ ์ค์ ์ปดํ์ผ ํ์ฌ ์๋ ์ด์๋ฅผ ํด๊ฒฐํด์ค๋ค. ์ด๋ ๊ฒ ์คํ์์ง์ผ๋ก ๋ฐํ์๋ ์๋ฐ ์คํํ์ผ์ JVM์ ํตํ์ฌ ์ฐ๋ฆฌ์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํด์ฃผ๊ฒ ๋๋ค.
'IT Dictionary > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋ ๋๋ฒ๊น (Vscode Debugging) (13) | 2023.04.29 |
---|---|
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Sorting Algoritm) ๊ฐ๋ ์ ๋ฆฌ (0) | 2023.04.29 |
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ , ์๋ฐ์คํฌ๋ฆฝํธ(JS) ์๋ ์๋ฆฌ (0) | 2023.04.29 |
๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (0) | 2023.04.28 |
C์ธ์ด ์ปดํ์ผ ๊ณผ์ (C Compile Process) (0) | 2023.04.28 |