ch19 : JVM
Last updated
Last updated
๋ชฉ์ฐจ
GC
JVM (Java Virtual Machine)
์๋ฐ ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ํ๋ก๊ทธ๋จ์ด๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ JVM ์์์ ๋์ํ๋ค.
JRE (Java Runtime Environment) :
(์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ฐ ์ฌ์ฉ์๋ค์ ์ํ) ์คํ์ ์ํ ํ๊ฒฝ
์๋ฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Java class libraries) + ์๋ฐ ๊ฐ์ ๋จธ์ (JVM)
JDK (Java Develope Kit)
๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฒฝ
JRE์ ์ถ๊ฐ๋ก ์๋ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๋ฐ ํ์ํ ์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ์ ๊ฐ์ ๋ช ๋ น์ดํ ๊ฐ๋ฐ ๋๊ตฌ๋ ํฌํจ๋๋ค.
์๋ฐ๋ OS์ ๋ ๋ฆฝ์ ์ด๋ค
์ด๋ค OS๋ก ์ ๊ทผํด๋ JAVA๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด JVM๋ฅผ ํตํด์ ๋์ํ๊ธฐ ๋๋ฌธ์ (์ฆ, OS์์ JRE/JDK๋ฅผ ๋ค์ด ๋ฐ์์ ๋์์ํด) OS์ ๋ ๋ฆฝ์ ์ด๊ฒ ์ฝ๋ฉํ ์ ์๋ค. (Write Once Run Anywhere)
c/c++๋ฑ ์๋ฐ ์ด์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ปดํ์ผ๋ฌ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํํ ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋์ ์ปดํจํฐ์ cpu์ ์ด์์ฒด์ ์ ์ข ์์ ์ธ ์ฝ๋๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
Interpreter (์ธํฐํ๋ฆฌํธ) ๋ฐฉ์ : ์์ค์ฝ๋๋ฅผ ์ปดํ์ผ์์ ๋ณํํ์ง ์๊ณ , ํ๋ก๊ทธ๋จ์ ์คํํ ๋(๋ฐํ์ ์)๋ง๋ค ๋ณํ โ ๊ฐํธํ๋ ์๋๊ฐ ๋๋ฆผ Static Complie (์ ์ ์ปดํ์ผ) ๋ฐฉ์ : ์คํ ์ ์ ์ ๋ถ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ค.
์๋ฐ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ๋ฐฉ์์ผ๋ก, ์ธํฐํ๋ฆฌํธ์ ์ ์ ์ปดํ์ผ ๋ฐฉ์์ ํผํฉํ ๋ฐฉ์์ด๋ค.
์ธํฐํ๋ฆฌํฐ์ ์ํด ์๋ก์ด ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ์์ ์ ๊ณ์ํ๊ณ + ํ๋ฒ ๋ณํ๋ ์ฝ๋๋ ์บ์์ ์ ์ฅํ์๋ค๊ฐ ํ์์ ์ฌ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํ๋๋ ์ฝ๋๋ ๋น ๋ฅด๊ฒ ์ํ๋๊ณ , ์ฒ์ ์์ํ๋ ์ฝ๋๋ ๋ณํํด์ผํ๋ฏ๋ก ์๋๊ฐ ๋๋ฆฌ๋ค.
๋์ ๋ณํ์ด๋ผ๊ณ ๋ ํ๋ฉฐ, Java์ C#์์ ์ฌ์ฉํ๋ค.
์๋ฐ ์์ค(.java)๋ฅผ ์๋ฐ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์๋ฐ ๋ฐ์ดํธ ์ฝ๋(.class)๋ก ์ปดํ์ผํ๋ค.
์๋ฐ๋ ํด๋์ค ํ์ผ์ ๋์ ์ผ๋ก ์ฝ์ด์จ๋ค. ์ฆ, JVM์ด ๋์ํ๋ค๊ฐ ํด๋์ค ํ์ผ์ ์ฐธ์กฐํ๋ ์๊ฐ ๋์ ์ผ๋ก ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ค.
์คํ ์์ง(Execution Engine)์ JVM ๋ฉ๋ชจ๋ฆฌ(Runtime Data Area)์ ์ฌ๋ผ์จ ๋ฐ์ดํธ ์ฝ๋๋ค์ ๋ช ๋ น์ด ๋จ์๋ก ํ๋์ฉ ๊ฐ์ ธ์์ ์คํํฉ๋๋ค.
์ ๊ณผ์ ์์ JVM์ Execution Engine์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ๋ฐฉ์์ด JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ด๋ค.
Hotspot JVM์ ์ฑ๋ฅ์ด ์ ํ๊ฐ ๋ ๋งํ ๋ถ๋ถ(HotSpot)์ ์ฐพ๊ณ , ํด๋น ๋ถ๋ถ์์ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ด๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ Client์ Server ๋ ๊ฐ์ง๊ฐ ์๋ค.
HotSpot ํด๋ผ์ด์ธํธ ์ปดํ์ผ๋ฌ
CPU ์ฝ์ด๊ฐ ํ๋๋ฟ์ธ ์ฌ์ฉ์๋ฅผ ์ํด ๋ง๋ค์ด์ก๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ ์๊ฐ์ ๋น ๋ฅด๊ฒํ๊ณ , ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๋๋ก ํ๋ค.
HotSpot ์๋ฒ ์ปดํ์ผ๋ฌ
์ฝ์ด๊ฐ ๋ง์ ์ฅ๋น์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฌ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ํ ์๋์ ์ด์ ์ด ๋ง์ถฐ์ ธ ์๋ค.