JVM
Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ ๋จธ์ ์ผ๋ก, Java ์ฝ๋ (๋ฐ์ดํธ์ฝ๋) ๋ฅผ ์คํํ๋ ์ญํ ์ ํจ.
ํ๋ซํผ ๋ ๋ฆฝ์ฑ ์ ์ ๊ณตํ๋ฉฐ, Java ํ๋ก๊ทธ๋จ์ด ๋ค์ํ ์ด์์ฒด์ ์์ ์คํ๋ ์ ์๋๋ก ํด์ค.
1. JVM ์ ์ฃผ์ ๊ธฐ๋ฅ
1.1 ํ๋ซํผ ๋
๋ฆฝ์ฑ ์ ๊ณต
Java ์ฝ๋๋
.class
ํ์ผ(๋ฐ์ดํธ์ฝ๋)๋ก ๋ณํ๋จ.JVM์ด ํด๋น ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ์ฌ ์ด์์ฒด์ (OS)์ ์๊ด์์ด ์คํ ๊ฐ๋ฅ
"Write Once, Run Anywhere(WORA)" ๊ฐ๋ ๊ตฌํ
1.2 ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ(Garbage Collection)
JVM ์ Heap ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌ
Garbage Collector(GC)
๊ฐ ๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํ
1.3 ์คํ ์ต์ ํ(JIT ์ปดํ์ผ๋ฌ)
Java ์ฝ๋๋ ์ฒ์์๋ ๋ฐ์ดํธ์ฝ๋๋ก ์คํ๋์ง๋ง, JVM ์ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ ๊ฐ ์คํ ์ค ์ผ๋ถ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํ์ฌ ์ฑ๋ฅ ํฅ์
2. JVM ์ ์ฃผ์ ๊ตฌ์ฑ ์์
JVM ์ ํฌ๊ฒ 3๊ฐ์ง ์ฃผ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋จ.
2.1 ํด๋์ค ๋ก๋ ์์คํ
(Class Loader System)
ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ ๋งํฌ, ์ด๊ธฐํํ๋ ์ญํ
Java ์ฝ๋(
.java
) โ ๋ฐ์ดํธ์ฝ๋(.class
) ๋ณํ ํ JVM ๋ด๋ถ์์ ์คํ๋จ.
ํด๋์ค ๋ก๋ฉ ๊ณผ์
๋ก๋ฉ(Loading) :
.class
ํ์ผ์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ญํน(Ranking) :
๊ฒ์ฆ(Verification) : ๋ฐ์ดํธ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
์ค๋น(Preparation) : ์ ์ ๋ณ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
ํด์(Resolution) : ์ฌ๋ณผ๋ฆญ ์ฐธ์กฐ๋ฅผ ์ค์ ์ฐธ์กฐ๋ก ๋ณํ
์ด๊ธฐํ(Initialization) :
static
๋ณ์ ์ด๊ธฐํ ๋ฐstatic
๋ธ๋ก ์คํ
ํด๋์ค ๋ก๋ ์ ํ
Bootstrap ClassLoader :
java.lang
ํจํค์ง ๋ฑ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋Extension ClassLoader :
ext
๋๋ ํฐ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋Application ClassLoader : ํด๋์คํจ์ค์์ ์ฌ์ฉ์ ํด๋์ค ๋ก๋
2.2 ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ(Runtime Data Area)
JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋จ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
Method Area(๋ฉ์๋ ์์ญ)
ํด๋์ค ์ ๋ณด, ์ ์ ๋ณ์, ๋ฐํ์ ์์ ํ์ ์ ์ฅ
๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์ (Static Data ์ ์ฅ)
Heap Area(ํ ์์ญ)
๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
๋ชจ๋ ์ฐ๋ ๋๊ฐ ๊ณต์
Garbage Collector(GC) ๊ด๋ฆฌ ๋์
Stack Area(์คํ ์์ญ)
๊ฐ ์ฐ๋ ๋๋ง๋ค ์์ฑ๋๋ฉฐ, ๋ฉ์๋ ํธ์ถ ์ ์คํ ํ๋ ์์ด ์์ฑ๋จ.
์ง์ญ ๋ณ์, ๋ฉ์๋ ํธ์ถ ์ ๋ณด ์ ์ฅ
PC Register(PC ๋ ์ง์คํฐ)
ํ์ฌ ์คํ ์ค์ธ JVM ๋ช ๋ น์ด์ ์ฃผ์ ๋ฅผ ์ ์ฅ
๊ฐ ์ฐ๋ ๋๋ง๋ค ๋ณ๋๋ก ์กด์ฌ
Native Method Stack(๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ)
JNI(Java Native Interface) ๊ธฐ๋ฐ์ ๋ค์ดํฐ๋ธ ์ฝ๋(C/C++ ๋ฑ) ์คํ์ ์ํ ๊ณต๊ฐ
2.3 ์คํ ์์ง(Execution Engine)
JVM ์์ ์ค์ ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ปดํฌ๋ํธ
์คํ ๊ณผ์
์ธํฐํ๋ฆฌํฐ
๋ฐ์ดํธ์ฝ๋๋ฅผ ํ์ค ์ฉ ์ฝ์ด ํด์ํ๊ณ ์คํ
์คํ ์๋๊ฐ ๋๋ฆฌ์ง๋ง, ์ฆ์ ์คํ ๊ฐ๋ฅ
JIT(Just-In-Time) ์ปดํ์ผ๋ฌ
์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์์ฃผ ์คํ๋๋ ์ฝ๋ ๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํ์ฌ ์๋๋ฅผ ํฅ์
HotSpot JVM ์์ ํ์ฉ
Garbage Collector(GC)
Heap ์์ญ์ ๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํ
3. JVM ์ ์คํ ๊ณผ์
Java ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ
์์ค ์ฝ๋ ์์ฑ(
.java
ํ์ผ)์ปดํ์ผ(
javac
์ฌ์ฉํ์ฌ.class
๋ฐ์ดํธ์ฝ๋ ์์ฑ)JVM ์ด ๋ฐ์ดํธ์ฝ๋ ๋ก๋(
Class Loader
๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋)๋ฐ์ดํธ์ฝ๋ ์คํ (
Execution Engine
์ด ์ธํฐํ๋ฆฌํฐ/JIT ๋ก ์คํ)Garbage Collector๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
4. JVM ๊ณผ JDK, JRE ์ ์ฐจ์ด์
๊ตฌ์ฑ ์์
์ค๋ช
JVM (Java Virtual Machine)
๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๊ฐ์ ๋จธ์
JRE (Java Runtime Environment)
JVM + ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Java ์คํ ํ๊ฒฝ)
JDK (Java Development Kit)
JRE + Java ๊ฐ๋ฐ ๋๊ตฌ (์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ ํฌํจ)
JVM โ JRE โ JDK ์์ผ๋ก ํฌํจ ๊ด๊ณ๊ฐ ์์. ์ฆ, JDK๋ฅผ ์ค์นํ๋ฉด JRE์ JVM์ด ํฌํจ๋จ.
5. JVM ํ๋ ๋ฐ ์ต์ ํ
JVM ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง, ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๋ค์ํ ์ค์ ์ด ๊ฐ๋ฅํจ.
JVM ์ต์ ์์
java -Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
-Xms512m
์ด๊ธฐ Heap ํฌ๊ธฐ 512MB ์ค์
-Xmx2g
์ต๋ Heap ํฌ๊ธฐ 2GB ์ค์
-XX:+UseG1GC
G1 Garbage Collector ์ฌ์ฉ
-XX:MaxGCPauseMillis=200
GC ์ต๋ ์ ์ง ์๊ฐ 200ms๋ก ์ ํ
6. JVM Garbage Collection (GC)
JVM ์ GC(Garbage Collection) ์ ํตํด Heap ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ๊ด๋ฆฌํจ.
GC ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ
Serial GC โ ๋จ์ผ ์ฐ๋ ๋์์ GC ์ํ(์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ)
Parallel GC โ ๋ฉํฐ ์ฐ๋ ๋๋ก GC ์ํ(๋ฉํฐ์ฝ์ด ํ๊ฒฝ์ ์ ํฉ)
CMS GC(Concurrent Mark Sweap) โ ์๋ต ์๋๊ฐ ์ค์ํ ์๋น์ค์์ ์ฌ์ฉ
G1 GC(Garbage First GC) โ ์ต์ GC, ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ
GC ๋์ ๋ฐฉ์
Young Generation(Eden + Survivor)
์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋จ.
Minor GC ๋ฐ์ ์ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ๋ก ์ด๋
Old Generation(Tenured)
Young Generation ์ ์ง๋ ์ค๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋จ.
Major GC/ Full GC ๋ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ์
Permanent Generation(Metaspace)
ํด๋์ค ์ ๋ณด์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ(Java 8 ์ดํ Metaspace๋ก ๋ณ๊ฒฝ)
Last updated
Was this helpful?