<์๋ฐ์ ์ ์ 3ํ>์ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- 1. ์๋ฐ์ธ์ด์ ํน์ง
- 2. JVM
- 2-1) JVM๊ตฌ์ฑ
- 2-2) JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- 3. ์๋ฐํ๋ก๊ทธ๋จ์ ์คํ๊ณผ์
1. ์๋ฐ์ธ์ด์ ํน์ง
- ์ด์์ฒด์ ์ ๋ ๋ฆฝ์ ์ด๊ณ , JVM์ ์ข ์์ ์ด๋ค. "write once, run anywhere"
- ๊ฐ์ฒด์งํฅ์ธ์ด์ด๋ค.
- Garbage collection์ด ์๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
- ๋คํธ์ํฌ์ ๋ถ์ฐ์ฒ๋ฆฌ ์์ : ๋ค์ํ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(JavaAPI)๋ฅผ ํตํด ๋น๊ต์ ์งง์ ์๊ฐ์ ๋คํธ์ํฌ ๊ด๋ จ ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
- ๋ฉํฐ์ค๋ ๋ ์ง์ : ์ผ๋ฐ์ ์ธ ๋ฉํฐ์ค๋ ๋ ์ง์์ ์ด์์ฒด์ ์ ๋ฐ๋ผ ๊ตฌํ๋ฐฉ๋ฒ๊ณผ ์ฒ๋ฆฌ๋ฐฉ์์ด ์์ดํ์ง๋ง, ์๋ฐ์ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ ์์คํ ์ ์๊ด์์ด ๊ตฌํ์ด ๊ฐ๋ฅํ๊ณ , JavaAPI๊ฐ ์ ๊ณต๋์ด ๊ตฌํ์ด ์ฝ๋ค. ๋ ์ฌ๋ฌ ์ค๋ ๋์ ์ค์ผ์ฅด๋ง์ ์๋ฐ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ด๋นํ๋ค.
- ๋์ ๋ก๋ฉ ์ง์ : ์คํ์์ ๋ชจ๋ ํด๋์ค๊ฐ ๋ก๋ฉ๋์ง ์๊ณ , ํ์ํ ์์ ์ ๋ก๋ฉํ ์ ์๋ค.
2. JVM(java virtual machine)
VM์ ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ๊ฐ์ ๊ธฐ๊ณ๋ก, ๊ฐ์ ์ปดํจํฐ๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด ๋ค์ฌ ์๋ฐ API์ ํจ๊ป ์คํํ๋ค.
- JAVA์ OS์ฌ์ด์์ ์ค๊ฐ์ ์ญํ ์ ์ํํ์ฌ JAVA๊ฐ OS์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ฌ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
- ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ, Garbage collection์ ์ํํ๋ค.
- ์คํ๊ธฐ๋ฐ์ ๊ฐ์๋จธ์ ์ด๋ค.
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ JVM์ ๋ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
2-1) JVM๊ตฌ์ฑ
- Java Compiler : ์๋ฐ ์์ค(.java)์ฝ๋๋ฅผ ๋ฐ์ดํธ ์ฝ๋(.class)๋ก ๋ณํํ๋ ์ญํ
- Class Loader : JVM๋ด๋ก ํด๋์ค(.classํ์ผ)๋ฅผ ๋ก๋ํ๊ณ , ๋งํฌ๋ฅผ ํตํด ๋ฐฐ์นํ๋ ์์ ์ ์ํํ๋ ๋ชจ๋
- Runtime Data Areas : JVM์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์์์ ์คํ๋๋ฉด์ ํ ๋น๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- Native Method Interface(JNI) : JVM์ ์ํด ์คํ๋๋ ์ฝ๋ ์ค ๋ค์ดํฐ๋ธ๋ก ์คํํ๋ ๊ฒ์ด ์๋ค๋ฉด ํด๋น ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ํธ์ถ๋ ์ ์๋๋ก ๋ง๋ ์ผ์ข ์ ํ๋ ์์ํฌ
- Native Method Libraries : ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค
- Garbage Collection(GC) : Java Application์์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์๊ฑฐํ๋ ๊ธฐ๋ฅ
- Execution Engine(์คํ ์์ง) : ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ค์ ๋ก JVM๋ด๋ถ์์ ๊ธฐ๊ณ๊ฐ ์คํํ ์ ์๋ ํํ(๊ธฐ๊ณ์ด)๋ก ๋ณ๊ฒฝํ์ฌ ํด๋์ค๋ฅผ ์คํ์ํค๋ ๋ชจ๋
โป ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํ๋ 2๊ฐ์ง ๋ฐฉ์
- Interpreter : ๋ช ๋ น์ด๋ฅผ ๊ทธ๋๊ทธ๋ ํ์ค์ฉ ํด์ํด์ ์คํํด ์๋๊ฐ ๋๋ฆฌ๋ค.
- JIT(Just-In-Time) compiler : ์ธํฐํ๋ฆฌํ ์ ๋จ์ (์ฑ๋ฅ, ์๋ ๋ฑ)์ ๋ณด์ํด์ ๋์ ๋ ๋ฐฉ์์ผ๋ก, ์ ์ ํ ์๊ฐ์ ์ ์ฒด ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํ๋ค.
2-2) JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- Method Area : ์ฌ์ฉ๋ ํด๋์ค์ ํด๋์ค ํ์ผ(.class)์ ๋ถ์ํ์ฌ ์ด๊ณณ์ ์ ์ฅ
- Call Stack : ๋ฉ์๋์ ์์ ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ณตํ๊ณ ๋ฉ์๋๊ฐ ์์ ์ ๋ง์น๋ฉด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋น์์ง
- Heap : ์ธ์คํด์ค๊ฐ ์ฌ๊ธฐ์ ์์ฑ๋จ
3. ์๋ฐํ๋ก๊ทธ๋จ ์คํ๊ณผ์
โ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ OS๋ก๋ถํฐ ์ด ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋๋ค. JVM์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
โก ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ ์์ค์ฝ๋(.java)๋ฅผ ์ฝ์ด๋ค์ฌ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ์ํจ๋ค.
โข Class Loader๋ฅผ ํตํด classํ์ผ๋ค์ JVM์ผ๋ก ๋ก๋ฉํ๋ค.
โฃ ๋ก๋ฉ๋ classํ์ผ๋ค์ Execution engine์ ํตํด ํด์๋๋ค.
โค ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ Runtime Data Areas์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค. ์ด๋ฌํ ์คํ๊ณผ์ ์์์ JVM์ ํ์์ ๋ฐ๋ผ Thread Synchronization๊ณผ GC๊ฐ์ ๊ด๋ฆฌ์์ ์ ์ํํ๋ค.
'๐ฐ ์ธ์ด > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(3) (0) | 2020.06.09 |
---|---|
์๋ฐ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(2) (0) | 2020.06.09 |
์๋ฐ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(1) (0) | 2020.06.04 |
switch/case๋ฌธ (0) | 2020.06.04 |
์ฝ์ ์ ์ถ๋ ฅ (0) | 2020.06.04 |