-
about java
- sun์ฌ์์ ๊ฐ๋ฐ
- ๊ฐ์ฒด์งํฅ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- ํ์ฌ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- ์ฐ๋ฆฌ๋๋ผ ๊ธฐ์ ์์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ถ๋ถ์ ๊ตฌ์ฑ
Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language
ํน์ง
- ๊ฐ๋จํ๋ค
- ๊ฐ์ฒด์งํฅ์ - class ์ฌ์ฉ
- compile ์ธ์ด์ด์ interpreter ์ธ์ด
- robust(๊ฐ๋ ฅํ๋ค) ํฌ์ธํฐ ์ฐ์ฐ์ ์ง์x, ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์๋ฐ ์์คํ ์ด ๊ด๋ฆฌ(exception handling๋) ์์คํ ๋ถ๊ดด์ ์ฐ๋ คx
- secure ์์ - ์คํ์ ์ค๋ฅ ๋ฐ์์ด ์ ์
- platform independent - ์๋ฐ์ ์คํํ์ผ์ binary ํ์ผ, ๊ฐ์ ๋จธ์ ์ ์ํด ์คํ → cross platform os์ ๊ตฌ์ ๋ฐ์ง ์์
- multhithread ์ง์
- dynamic ๋์
์ฌ์ฉ๋ถ์ผ
- ์น ํ๋ก๊ทธ๋๋ฐ
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- ๊ฒ์ ๊ฐ๋ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋น ๋ฐ์ดํฐ, ๋ถ์ฐ์ฒ๋ฆฌ
GC(ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ)
๊ณผ JIT ์ปดํ์ผ๋ฌ(ํ๋ก๊ทธ๋จ ์คํ ์์ ์ byte๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ) ๊ธฐ๋ฅ ๋๋ฌธ์ ์คํ ์๋ ๋๋ฆผ(์ฑ๋ฅ ์ ํ)
- JVM : .java ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ์ฝ๊ณ , ๊ฒ์ฆ, ์คํํจ. ํ๋ซํผ๋ง๋ค ๋์ผํ ์คํํ๊ฒฝ์ ๋ณด์ฅ๋ฐ์. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ Garbage Collector๊ฐ ์ํ
- JRE : Java Runtime Environment์ ์ฝ์. JVM์ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ธฐํ ํ์ผ๋ค์ ๊ฐ์ง๊ณ ์์. ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ(์ปดํ์ผ ๋๊ตฌ๋x)
- JDK : Java Development Kit ์ ์ฝ์ด๋ก ์๋ฐ ์ปดํ์ผ๋ฌ์ ๋๋ฒ๊ฑฐ, JRE ๋ฑ์ด ํฌํจ๋ ๊ฐ๋ฐ ๋๊ตฌ๋ค. ๋จ์ํ ์๋ฐ๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ์๋ JRE(Java Runtime Environment)๋ง ์์ด๋ ๋๋ค.
์๋ฐํ์ผ์ ์คํํ๊ธฐ ์ํด์๋ ๋ ๋จ๊ณ๊ฐ ํ์ (1) ์ปดํ์ผ (2) ์คํ
Compiler๋ javac.exe์ ํด๋น, Java VM์ java.exe์ ํด๋น
javac๋ ํ์ผ์ ์ปดํ์ผํ๊ณ , java๋ ํจํค์ง์ ์กด์ฌํ๋ ํด๋์ค๋ฅผ ์คํํ๋ ์ญํ- ์์ค์ฝ๋(MyProgram.java)๋ฅผ ์์ฑ
- ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๋ ์๋ฐ ์์ค์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํธ ์ฝ๋ ํ์ผ=ํด๋์ค ํ์ผ(MyProgram.class)์ ์์ฑ, ์ปดํ์ผ ๋ ํด๋์ค ํ์ผ์ Java VM(Java Virtual Machine)์ด ์ธ์ํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ => ์ปดํ์ผ
- Java VM(JVM)์ ํด๋์ค ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ์๋ฐ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ํด์ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ํํ๋ค. => ์ธํฐํ๋ฆฌํฐ ๊ณผ์
- MyProgram ์ํ ๊ฒฐ๊ณผ๊ฐ ์ปดํจํฐ์ ๋ฐ์
exeํ์ผ์ด ์๋ classํ์ผ๋ก ์ปดํ์ผ ํ ์คํ
JIT์ปดํ์ผ๋ฌ
Just In Time ์ปดํ์ผ๋ฌ์ ์ฝ์์ด๋ฉฐ, ๊ธฐ์กด JVM์ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ ํ๋ ๊ณผ์ ๊ณผ ๊ทธ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํฐํ๋ 2๊ฐ์ง์ ๊ณผ์ ์ ๋ชจ๋ ๊ฑฐ์ณ์ผ ํ๊ณ ํนํ๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ๋ฐํ์ ์ ์ฝ๋๋ฅผ ํ์ค์ฉ ์ฝ์ด๋ค์ฌ ์คํ ์๋๊ฐ ๋๋ฆผ
-> JIT ์ปดํ์ผ๋ฌ์ ๋์(1) ์ปดํ์ผ ๋ฐฉ์ : ์์ค์ฝ๋๋ฅผ ํ๊บผ๋ฒ์ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ native machine (๊ธฐ๊ณ)์ด๋ก ๋ณํ
(2) ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์ : ์์ค์ฝ๋๋ฅผ ๋น๋์์ ์๋ฌด๊ฒ๋ ํ์ง ์๋ค๊ฐ, ๋ฐํ์์์ ํ์ค ํ์ค ์ฝ์ด๊ฐ๋ฉฐ ๋ณํ
์๋ฐ๊ฐ ์ปดํ์ผ, ์ธํฐ ํ๋ฆฌํฐ ๋ฐฉ์์ ๋ชจ๋ ๊ฑฐ์น๋ ์ด์
WORA(Write once, run anywhere)์ ๊ตฌํํ๊ธฐ ์ํจ์ด๋ผ๊ณ ํ ์ ์๋ค.
- ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ : ์๋ฐ๋ ๋ฌผ๋ฆฌ์ ์ธ ๋จธ์ ๊ณผ ๋ณ๊ฐ์ ๊ฐ์ ๋จธ์ (JVM)์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๊ณ ์ ํ๋ ๋ชจ๋ ํ๋์จ์ด์ JVM์ ๋์์ํด์ผ๋ก์จ ์๋ฐ ์คํ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ชจ๋ ์ข ๋ฅ์ ํ๋์จ์ด์์ ๋์๋๊ฒ ํ ๊ฒ์ด๋ค. Java ์์ค์ฝ๋(.java)๋ CPU๊ฐ ์ธ์์ ํ์ง ๋ชปํ๋ฏ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ์ ํด์ค์ผ ํ๋ค. ํ์ง๋ง Java๋ JVM์ด๋ผ๋ ๊ฐ์ ๋จธ์ ์ ๊ฑฐ์ณ์ OS์ ๋๋ฌํ๊ธฐ ๋๋ฌธ์ OS๊ฐ ์ธ์ํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ก ์ปดํ์ผ๋๋ ๊ฒ ์๋๋ผ JVM์ด ์ธ์ํ ์ ์๋ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ๋๋ค. ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ .java ํ์ผ์ .class ํ์ผ์ธ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ๋ค.
- ์๋ฐ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ : JVM์ด ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ปดํ์ผ๋ฌ์ ๊ฒฝ์ฐ ๊ธฐ๊ณ, ๋ฌผ๋ฆฌ์ ์ธ ๋จธ์ ์ ์ข ์๋๋ฏ๋ก ์๋ฐ๋ ์๋ฐ ์ปดํ์ผ๋ฌ๋ก ์์ฑ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํฐ๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด์ ์คํํ๋ค. ์ด๊ธฐ ์คํ์๋์ ๋ณด์ ์ธก๋ฉด์์ ์ฅ์ ์ด ์๋ค(ํ์ค์ฉ ์ฝ์).
JIT ์ปดํ์ผ๋ฌ ๋์ ๋ฐฉ์
JVM์ ๊ฐ์ฅ ์์ฃผ ์คํ๋๋ ์ฝ๋ ๋ธ๋ก, ๋ฉ์๋ ๋๋ ๋ฉ์๋์ ์ผ๋ถ, ํนํ ๋ฐ๋ณต๋ฌธ์ ๋ชจ๋ํฐ๋งํด์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผ-> ๋ถํ์ํ ๋ฒ์ญ๊ณผ์ ์ ์๋ตํ์ฌ ์คํ์๋ ํฅ์
JIT ์ปดํ์ผ๋ฌ๋ ์คํ ์์ ์์๋ ์ธํฐํ๋ฆฌํฐ์ ๊ฐ์ด ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํด๋น ์ฝ๋๊ฐ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ผ๋ฉด ์ปดํ์ผํ๊ณ ๊ทธ ์ฝ๋๋ฅผ ์บ์ฑ(์ ์ฅ)ํ๋ค. JIT ์ปดํ์ผ์ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณผ์ ์ ์ค์๊ฐ์ผ๋ก ์ผ์ด๋๋ฉฐ(Just-In-Time), ์ ์ฒด ์ฝ๋์ ํ์ํ ๋ถ๋ถ๋ง ๋ณํํ๋ค. ์ด๋ฏธ ํ ๋ฒ ์ฝ์ด์ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋ ์ฝ๋๋ ์บ์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ์ปดํ์ผํ์ง ์๋๋ค.
JIT ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ ์กฐ๊ฑด์ ์ผ๋ง๋ ์์ฃผ ์ฝ๋๊ฐ ์คํ๋๋๊ฐ ์ด๋ค. ๋ฉ์๋๊ฐ ํธ์ถ๋ ํ์, ๋ฉ์๋์ ๋ฃจํ๋ฅผ ๋น ์ ธ๋์ค๊ธฐ๊น์ง ๋ ํ์ ๋ ๊ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
JIT ์ปดํ์ผ ๊ณผ์ ์ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๊ณ , JVM ์ค๋ ๋๋ JIT ์ปดํ์ผ ์ค๋ ๋์ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ์ํฅ์ ์ฃผ์งx
์ปดํ์ผ์ด ์งํ์ค์ผ ๋์๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋์ํ์ง๋ง, ์ปดํ์ผ์ด ์๋ฃ๋๋ฉด ์ปดํ์ผ ๋ ๋ฒ์ ์ ์ฌ์ฉ
=> on-stack replacement(OSR)์ฝ๊ฒ ๋งํด์ ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํ๋ฅผ ๋ฏธ๋ฆฌ ํด์ฃผ๊ณ (์ปดํ์ผ ๊ณผ์ ์ ์๊ฐ์ด ์์๋จ) ์ธํฐํ๋ฆฌํฐ์์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ฝ์ง ์๊ณ ์ปดํ์ผ ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ์ฌ์ฉํจ์ผ๋ก์จ ๊ธฐ๊ณ์ด ๋ฒ์ญ ์๊ฐ์ ๋จ์ถํ๋ค.
JIT ์ปดํ์ผ๋ฌ๋ C1 (ํด๋ผ์ด์ธํธ ์ปดํ์ผ๋ฌ), C2(์๋ฒ ์ปดํ์ผ๋ฌ)๋ก ๊ตฌ๋ถ๋๋๋ฐ C1์ ๋น ๋ฅด๊ฒ ์คํ๋์ง๋ง ๋ ์ต์ ํ ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, C2๋ ์คํ ์๊ฐ์ด ์ข ๋ ๊ฑธ๋ฆฌ์ง๋ง ๋ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์ค๋๋ ์ JVM์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ค.
C2๋ C++๊ณผ ๊ฒฌ์ค ์ ์๋ ์๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๋ช๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ด์ ์๋ก์ด ํ๋ก์ ํธ๊ฐ ์งํ๋์๋๋ฐ, ์ด๋ฅผ GraalVM์ด๋ผ๊ณ ํ๋ค.JVM ๊ตฌ์ฑ์์์ ์ญํ
- ํด๋์ค ๋ก๋(Class Loader)
- ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area)
- ์คํ ์์ง(Execution Engine)
- JNI - ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์ธํฐํ์ด์ค (Native Method Interface)
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Native Method Library)
- ํด๋์ค๋ก๋
'๐ญ Study > : Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ch5 ์๋ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ OOP (ํด๋์ค, ๋ฉ์๋, ์๋ฐ ๋ณ์) (0) 2023.09.05 [Java] ch4 ์ ์ด๋ฌธ (0) 2023.08.31 [Java] ch3 ์๋ฐ์ ์๋ฃํ (Data type) ์ ๋ฆฌ (1) 2023.08.13 [Java] JVM ๋์๋ฐฉ์ & ๊ตฌ์ฑ์์ (0) 2023.08.09 [Java] ch2 ์๋ฐ ์์ค์ฝ๋ ๊ตฌ์กฐ & ์๋ฃํ ์ข ๋ฅ (0) 2023.08.09 ๋๊ธ