โ Java์ ํน์ง
- Java๋ JVM ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ด๋ค.
- Java ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ์์์ ๋ฐ๋ก ์คํ๋๋ ๊ฒ์ด ์๋๋ผ, JVM ์์์ ์คํ๋๋ค.
๋ฐ๋ผ์ Java ํ๋ก๊ทธ๋จ์ ์ด๋ ํ ํ๋์จ์ด๋ JVM์ด ์ค์น๋์ด ์๊ธฐ๋ง ํ๋ค๋ฉด,
์ด์์ฒด์ ์ ์์กดํ์ง ์๊ณ (์ฆ, ์๋ฐ ์คํ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋) ๋์ํ๋ค.
(WORA - Write Once, Run Anywhere)
- ์๋ฐ ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๊ณผ ํด์ ์ ์ง์ ๊ด์ฌํ ์ฑ ์์ ๊ฐ์ง ์๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด JVM์ด ์๋์ผ๋ก ํ ๋นํด์ค๋ค.
๋ฉ๋ชจ๋ฆฌ ํด์ ๋ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํด ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ฆ, ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๊ณ , OS ๋ ๋ฒจ๊น์ง๋ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค.
๋ฐ๋ผ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๊ทธ๋ฌ๋ C, C++๊ฐ์ ๋ค์ดํฐ๋ธ ์ธ์ด์ ๋นํด ์คํ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๊ณ ,
๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์ง ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
โ Java ํ๋ก๊ทธ๋จ ์คํ ๊ณผ์
- ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฐ ์์ค์ฝ๋๋ฅผ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ์ฌ .class ํ์ผ์ ์์ฑํ๋ค.
- ๋ฐํ์์ JVM ํด๋์ค ๋ก๋๊ฐ .class ํ์ผ์ ์ฝ์ด์ JVM์ Runtime Data Area์ load ํ๋ค. (Lazy loading ๋ฐฉ์)
- ์ธ์ ๋ก๋๋๋๋? ํด๋์ค๊ฐ ์์ฑ, ํธ์ถ, ์ฐธ์กฐ๋ ๊ฒฝ์ฐ์
- ์ด ๊ณผ์ ์์ ๋งํน๊ณผ ์ด๊ธฐํ ๋ฅผ ์ํํ๋ค.
- JVM execution engine์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด(๋ค์ดํฐ๋ธ ์ฝ๋)๋ก ๋ณํํ์ฌ ์คํํ๋ค.
- ์ด ๋ ์ธํฐํ๋ฆฌํฐ์ JIT ์ปดํ์ผ๋ฌ๊ฐ ๊ด์ฌํ๋ค.
โ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์๊ณผ JIT(Just-In-Time) ์ปดํ์ผ ๋ฐฉ์
JVM์ JVM Runtime Data Area์ ๋ก๋๋ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ๋ค์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ฒ์ญํ์ฌ ์คํ์ํจ๋ค.
๐ฅ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์์๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ์ค์ฉ ์ฝ์ด์ ํด์ํ๊ณ ์คํ์ํจ๋ค.
- ํ ์ค ๋จ์์ ์คํ์ ๋น ๋ฅด์ง๋ง,
๋ฐ๋ณต์ ์ธ ์ฝ๋๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋งค๋ฒ ํด์ ํ ์คํํด์ผ ํ๋ฏ๋ก, ์ ์ฒด ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
๐ฅ JIT ์ปดํ์ผ ๋ฐฉ์
JIT ์ปดํ์ผ ๋ฐฉ์์ ์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋์๋ค.
- ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํ๋๋ค.
- ์คํ ์ค ๋ฐ๋ณต์ ์ธ ์ฝ๋(์ด๊ฒ์ ํซ์คํ์ด๋ผ๊ณ ํ๋ค)๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, JVM์ ์ ์ ํ ์์ ์ ํด๋น ๋ฐ์ดํธ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ง๋ค๊ณ ์ด๊ฒ์ ์บ์ฑํ๋ค.
- ์ดํ๋ถํฐ๋ ํซ์คํ ์ฝ๋์ ๋ํด์๋ ์ธํฐํ๋ฆฌํ ๊ณผ์ ์ ์๋ตํ๊ณ ์บ์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ๋ค.
- JIT ์ปดํ์ผ ๋ฐฉ์์์๋ ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋ ์ฝ๋๊ฐ ๋ง์์๋ก ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋๋ค.
- ๊ทธ๋ฌ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค๋ ๋จ์ ์ด ์๋ค.
'๊ฐ์ธ ๊ณต๋ถ > Java, Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Functional Interface (ํจ์ํ ์ธํฐํ์ด์ค) (0) | 2025.01.09 |
---|---|
[Java] JRE์ JDK (2) | 2025.01.02 |
[JAVA] SwingUtilities.invokeLater() (2) | 2024.10.09 |
[JAVA] Cloneable๊ณผ Objects.clone() / Shallow Copy์ ๋ํด์ (0) | 2024.08.05 |
[Java] @ParameterizedTest ์จ๋ณด๊ธฐ (0) | 2024.07.20 |