JVM ์ด๋ ๋ฌด์์ธ๊ฐ
โ JVM(Java Virtual Machine)์ด๋?
์๋ฐ ๊ฐ์ ๋จธ์ ! โก๏ธ ์๋ฐ ํ๋ก๊ทธ๋จ ์คํํ๊ฒฝ์ ๋ง๋ค์ด ์ฃผ๋ ์ํํธ์จ์ด
์๋ฐ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ .class ๋ฐ์ดํธ ์ฝ๋๋ก ๋ง๋ค๋ฉด ์ด ์ฝ๋๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ ํ๊ฒฝ์์ ์คํ๋๋ค.
1๏ธโฃ JVM(Java Virtual Machine)์ ์ฅ์
Java๋ ์ด๋ ํ ํ๋ซํผ์ ์ํฅ์ ๋ฐ์ง ์์ โก๏ธ JVM์ ์ฌ์ฉํ๋ฉด ํ๋์ ์ฝ๋(.class)๋ก ๋ชจ๋ ํ๋ซํผ์์ ๋์ํ๋๋ก ํ ์ ์์
.class ํ์ผ์ ๋ฐ์ดํธ ์ฝ๋๋ก, ์ฌ๋์ด ์ฐ๋ ์๋ฐ ์ฝ๋์์ ์ปดํจํฐ๊ฐ ์ฝ๋ ๊ธฐ๊ณ์ด๋ก์ ์ค๊ฐ ๋จ๊ณ!
C์ธ์ด์ ๊ฒฝ์ฐ
C์ธ์ด๋ก ์์ฑ๋ likelion.c๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด likelion.c๋ฅผ ์๋์ฐ์์ ์ปดํ์ผํ๋ฉด likelion.exe๊ฐ ๋ง๋ค์ด์ง๋ค. ์๋์ฐ ์ปดํ์ผ๋ฌ๋ก ์ปดํ์ผ๋์๊ธฐ์ likelion.exe๋ ์๋์ฐ์์๋ง ์คํ๋๋ ์คํ ํ์ผ์ด๋ค. ์ฆ ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์ ๊ฐ์ด ์ปดํ์ผ ํ๋ซํผ๊ณผ ํ๊ฒ ํ๋ซํผ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋จ์ด ๋์ํ์ง ์๋๋ค. ๋ง์ฝ ์ด likelion.exe ํ์ผ์ ๋ฆฌ๋ ์ค์์ ์คํํ๋ ค๋ฉด -๋ฆฌ๋ ์ค ์ด์์ฒด์ ์ ๋ง๋ ์คํ ํ์ผ์ ์๋ก ๋ง๋ค์ด์ผ ํ๋ค.
Java์ ๊ฒฝ์ฐ
Java์ ๊ฒฝ์ฐ์๋ Java์ธ์ด๋ก ์์ฑ๋ likelion.java๋ ์ปดํ์ผํ๋ฉด likelion.class ํ์ผ์ด ์์ฑ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ๋ฐ์ดํธ ์ฝ๋๋ ๊ฐ์์ ํ๋ซํผ์ ์ค์น๋์ด ์๋ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM)์ด ์ด์์ฒด์ ์ ๋ง๋ ์คํ ํ์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ์ฆ Java์์๋ C์ธ์ด์๋ ๋ฌ๋ฆฌ JVM์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์์ ํ๋ซํผ์ ๋ง๊ฒ๋ ์ปดํ์ผ์ ๋ฐ๋ก๋ฐ๋ก ํด์ค์ผ ํ ํ์๊ฐ ์๋ค.
โป Java๋ ํ๋ซํผ์ ์ข ์์ ์ด์ง ์์ง๋ง, JVM์ ํ๋ซํผ์ ์ข ์์ ์ด๋ค.
์ฆ ๋ฆฌ๋ ์ค์ JVM๊ณผ ์๋์ฐ์ JVM์ ์๋ก ๋ค๋ฅด๋ค. ์๋ฐ๋ก ์์ฑ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์๋ฐ ๊ฐ์ ๋จธ์ ์์๋ง ์คํ๋ ์ ์์ผ๋ฏ๋ก, ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์๋ฐ ๊ฐ์ ๋จธ์ ์ด ์ค์น๋์ด ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ค๋ผํด์ ๋๋ถ๋ถ์ ์ฃผ์ ์ด์์ฒด์ ๋ฟ๋ง ์๋๋ผ ์น ๋ธ๋ผ์ฐ์ , ์ค๋งํธ ํฐ, ๊ฐ์ ๊ธฐ๊ธฐ ๋ฑ์์๋ ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์์ฝ๊ฒ ์ค์นํ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค.
โ JVM ๊ตฌ์กฐ
โก๏ธ ์๋ฐ ๋์ ๋ฐฉ์
1. ์๋ฐ๋ก ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด JVM์ OS๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
2. ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ ์์ค์ฝ๋(.java)๋ฅผ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ์ปดํ์ผํ๋ค.
3. Class Loader๋ฅผ ํตํด JVM Runtime Data Area๋ก ๋ก๋ฉํ๋ค.
4. Runtime Data Area์ ๋ก๋ฉ ๋ .class๋ค์ Execution Engine์ ํตํด ํด์ํ๋ค.
5. ํด์๋ ๋ฐ์ดํธ ์ฝ๋๋ Runtime Data Area์ ๊ฐ ์์ญ์ ๋ฐฐ์น๋์ด ์ํํ๋ฉฐ,
์ด ๊ณผ์ ์์ Execution Engine์ ์ํด GC์ ์๋๊ณผ ์ค๋ ๋ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
1๏ธโฃ ํด๋์ค ๋ก๋ : ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ก๋ฉํด์ฃผ๋ ์ญํ
์๋ฐ๋ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ์ฝ์ด์ค๋ฏ๋ก, ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ ๋ฐํ์์์์ผ ๋ชจ๋ ์ฝ๋๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ ๊ณผ ์ฐ๊ฒฐ๋๋ค. ์๋ฐ์์ ์์ค๋ฅผ ์์ฑํ๋ฉด .javaํ์ผ์ด ์์ฑ๋๊ณ .java์์ค๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ฉด .classํ์ผ์ด ์์ฑ๋๋๋ฐ ํด๋์ค ๋ก๋๋ .class ํ์ผ์ ๋ฌถ์ด์ JVM์ด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Area๋ก ์ ์ฌํ๋ค.
2๏ธโฃ ์คํ ์์ง : ๋ก๋๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐํ์ ๋ชจ๋
ํด๋์ค ๋ก๋์ ์ํด JVM์ผ๋ก ๋ก๋๋ .class ํ์ผ๋ค์ Runtime Data Areas์ Method Area์ ๋ฐฐ์น๋๋๋ฐ, ๋ฐฐ์น๋ ์ดํ์ JVM์ Method Area์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํ ์์ง(Execution Engine)์ ์ ๊ณตํ์ฌ, ์ ์๋ ๋ด์ฉ๋๋ก ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํ์ํจ๋ค. ์คํ ์์ง์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค.
3๏ธโฃ ๊ฐ๋น์ง ์ปฌ๋ ํฐ : Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ(์ ์ฌ)๋ ๊ฐ์ฒด๋ค ์ค์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ
์๋ฐ ๊ฐ์ ๋จธ์ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ด์ฉํ์ฌ ๋๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ฏ๋ก, ๋์ฑ ์์ฝ๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค. Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ(์ ์ฌ)๋ ๊ฐ์ฒด๋ค ์ค์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ฉฐ, GC์ญํ ์ ์ํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ค๋ ๋๋ค์ ์ผ์์ ์ง์ํ๊ฐ ๋๋ค.
โ ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ
โก๏ธ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉ (GC์ ๋์)
- ํ ์์ญ (Heap Area)
- ๋ฉ์๋ ์์ญ(Method Area)
โก๏ธ ์ค๋ ๋(Thread) ๋ง๋ค ํ๋์ฉ ์์ฑ
- ์คํ ์์ญ(Stack Area)
- PC ๋ ์ง์คํฐ (PC Register)
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ(Native Method Stack)
1๏ธโฃ ๋ฉ์๋ ์์ญ
ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์ , ์ ๊ทผ ์ ์ด์ ์ ๋ณด์ ๊ฐ์ ๊ฐ์ข ํ๋ ์ ๋ณด๋ค๊ณผ
๋ฉ์๋ ์ ๋ณด, ๋ฐ์ดํฐ Type ์ ๋ณด, Constant Pool, static๋ณ์, final class ๋ฑ์ด ์์ฑ๋๋ ์์ญ
2๏ธโฃ ํ ์์ญ
new ํค์๋๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์์ฑ๋๋ ์์ญ (์ฃผ๊ธฐ์ ์ผ๋ก GC๊ฐ ์ ๊ฑฐํ๋ ์์ญ)
Heap Area๋ ํจ์จ์ ์ธ GC๋ฅผ ์ํด ์์ ๊ฐ์ด ํฌ๊ฒ Young / Tenured / Permanent Generation 3๊ฐ์ง์ ์์ญ์ผ๋ก ๋๋๋ค.
1) Young Generation ์์ญ : ์๋ฐ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ง์ ์ ์ฅ๋๊ณ , ์๊ธด์ง ์ผ๋ง ์๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
Heap ์์ญ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ์ต์ด๋ก Eden ์์ญ์ ํ ๋น๋๊ณ , ์ด ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ๋ ์์ด๊ฒ ๋๋ฉด ์ฐธ์กฐ์ ๋์ ๋ฐ๋ผ Servivor์ ๋น ๊ณต๊ฐ์ผ๋ก ์ด๋๋๊ฑฐ๋ ํ์๋๋ค.
2) Minor GC : Young Generation๊ณผ Tenured Generation ์์์ GC
Young Generation(Eden+Servivor) ์์ญ์ด ์ฐจ๊ฒ ๋๋ฉด ๋ ์ฐธ์กฐ์ ๋์ ๋ฐ๋ผ Old์์ญ์ผ๋ก ์ด๋ ๋๊ฒ ๋๊ฑฐ๋ ํ์๋๋ค.
3) Major GC : 'Stop-the-World'๊ฐ ๋ฐ์ํ๊ณ Old์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ GC
Old์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉ์น๋ฅผ ๋๊ฒ ๋๋ฉด, Old ์์ญ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ๊บผ๋ฒ์ ์ญ์ ํ๋ GC๊ฐ ์คํ๋๋ค. ์ด๋ GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ ์์ ์ ๋ฉ์ถ๊ฒ ๋๋ค. ์ด๋ฅผ 'Stop-the-World' ๋ผ๊ณ ํ๋ค.
3๏ธโฃ์คํ ์์ญ
์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ, ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ์์ ๊ฐ ๋ฑ์ด ์์ฑ๋๋ ์์ญ
4๏ธโฃ PC ๋ ์ง์คํฐ
Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์ฆ ํ์ฌ ์ค๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น์ ์ ์ฅํ๊ณ ์๋ ์์ญ
5๏ธโฃ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack)
1. ์๋ฐ ์ด์ธ์ ์ธ์ด(C, C++, ์ด์ ๋ธ๋ฆฌ ๋ฑ)๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์ผ๋ฐ์ ์ธ C ์คํ์ ์ฌ์ฉ
2. ์๋ฐ ์ธํฐํ๋ฆฌํฐ : ๋ณดํต C/C++ ๋ฑ์ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ์ํ ์คํ์ ๋งํ๋ฉฐ, ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฝ๊ณ ํด์ํ๋ ์ญํ
โ ๊ฐ๋น์ง ์ฝ๋ ํฐ (Garbeage Collection)
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก JVM์ Heap ์์ญ์์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ํ์ ์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋ ํ๋ก์ธ์ค
โก๏ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ ๊ฐ์ฒด๋ค
๊ฐ์ฒด๋ค์ ์ค์ง์ ์ผ๋ก Heap์์ญ์์ ์์ฑ๋๊ณ Method Area์ด๋ Stack Area๋ฑ Root Area์์๋ Heap Area์ ์์ฑ๋ ๊ฐ์ฒด์ ์ฃผ์๋ง ์ฐธ์กฐํ๋ ํ์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์์ฑ๋ Heap Area์ ๊ฐ์ฒด๋ค์ด ๋ฉ์๋๊ฐ ๋๋๋ ๋ฑ์ ํน์ ์ด๋ฒคํธ๋ค๋ก ์ธํ์ฌ Heap Area ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฐธ์กฐ ๋ณ์๊ฐ ์ญ์ ๋๋ ํ์์ด ๋ฐ์ํ๋ฉด Heap์์ญ์์ ์ด๋์๋ ์ฐธ์กฐํ๊ณ ์์ง ์์ ๊ฐ์ฒด๋ค์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ค์ Unreachableํ๋ค๊ณ ํ๋ฉฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ๊ฑฐํ๋ค.
Reachable : ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋๊ณ ์๋ ์ํ
Unreachable : ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋๊ณ ์์ง ์์ ์ํ (GC์ ๋์์ด ๋จ)
โก๏ธ ์ฅ์
C๋ C++์์๋ ์ด๋ฌํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ผ์ผ์ด ํด์ค์ผ ํ๋ ๋ฐ๋ฉด, Java๋ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ํํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ์ ์ฅ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ์์ ๋ํด ์๋ฒฝํ๊ฒ ๊ด๋ฆฌํ์ง ์์๋ ๋์ด ์ค๋กฏ์ด ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ค.
โก๏ธ ๋จ์
1. ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋์ง ์ ํํ๊ฒ ์ ์ ์๋ค.
2. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋์ํ๋ ๋์์๋ JVM์ ๋ค๋ฅธ ๋์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
GC๊ฐ ๋๋ฌด ์์ฃผ ์คํ๋๋ฉด ์ํํธ์จ์ด ์ฑ๋ฅ ํ๋ฝ์ ๋ฌธ์ ๊ฐ ๋๊ธฐ๋ ํ๋ค. ๋ฐ๋ผ์ ์ ๊น์ ์ํํธ์จ์ด ์ผ์์ ์ง๋ก๋ ๋ชฉํํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ GC์ ์ฌ์ฉ์ด ์ ํฉํ์ง ์๋ค.
โก๏ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ ๊ฐ์ฒด๋ค
1๏ธโฃ ์ฒซ ๋ฒ์งธ ๊ณผ์
๊ฐ์ฒด๊ฐ ์ฒ์ ์์ฑ๋๊ณ Heap์์ญ์ Eden์ age-bit 0์ผ๋ก ํ ๋น๋ฉ๋๋ค. ์ด age-bit๋ Minor GC์์ ์ด์๋จ์ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํ๋ค.
2๏ธโฃ ๋ ๋ฒ์งธ ๊ณผ์
์๊ฐ์ด ์ง๋ Heap Area์ Eden ์์ญ์ ๊ฐ์ฒด๊ฐ ๋ค ์์ด๊ฒ ๋๋ฉด Minor GC๊ฐ ํ๋ฒ ์ผ์ด๋๊ฒ ๋๊ณ ์ฐธ์กฐ ์ ๋์ ๋ฐ๋ผ Servivor0 ์์ญ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ํ์๋๋ค.
3๏ธโฃ ์ธ ๋ฒ์งธ ๊ณผ์
๊ณ์ํด์ Eden์์ญ์๋ ์ ๊ท ๊ฐ์ฒด๋ค์ด ์์ฑ๋๋ค. ์ด๋ ๊ฒ ๋ Eden์์ญ์ ๊ฐ์ฒด๊ฐ ๋ค ์์ด๊ฒ ๋๋ฉด Young Generation ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ ๋น์ด์๋ Survival์ธ Survival1 ์์ญ์ ์ด๋ํ๊ณ ์ด์๋จ์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ age๊ฐ 1์ฉ ์ฆ๊ฐํ๋ค.
4๏ธโฃ ๋ค ๋ฒ์งธ ๊ณผ์
๋๋ค์ Eden ์์ญ์ ์ ๊ท ๊ฐ์ฒด๋ค๋ก ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด ๋ค์ํ๋ฒ minor GC๊ฐ ์ผ์ด๋๊ณ Young Generation(Eden+Servivor) ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ ๋น์ด์๋ Survival์ธ Survival0์ผ๋ก ์ด๋์ํจ ๋ค age๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค. ์ด ๊ณผ์ ์ ๊ณ์ํด์ ๋ฐ๋ณตํ๋ค.
5๏ธโฃ ๋ค์ฏ ๋ฒ์งธ ๊ณผ์
์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด age bit๊ฐ ํน์ ์ซ์ ์ด์์ผ๋ก ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ JVM์์ ์ค์ ํด๋์ age bit์ ๋๋ฌํ๊ฒ ๋๋ฉด ์ค๋ซ๋์ ์ฐ์ผ ๊ฐ์ฒด๋ผ๊ณ ํ๋จํ๊ณ Old generation ์์ญ์ผ๋ก ์ด๋์ํจ๋ค. ์ด ๊ณผ์ ์ ํ๋ก๋ชจ์ (Promotion)์ด๋ผ๊ณ ํ๋ค.
6๏ธโฃ ๋ง์ง๋ง ๊ณผ์
์๊ฐ์ด ์ง๋ Old์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉ์น๋ฅผ ๋๊ฒ ๋๋ฉด, Old ์์ญ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ๊บผ๋ฒ์ ์ญ์ ํ๋ GC๊ฐ ์คํ๋๋ค. Major GC๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด๊ณ ์ด๋ GC๋ฅผ ์คํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ ์์ ์ ๋ฉ์ถ๋ 'Stop-the-World'๊ฐ ๋ฐ์ํ๋ค.
โ JAVA์ ์คํ๋ฐฉ์
1๏ธโฃ ์์ค ์ฝ๋ ์์ฑ
Java ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ๋ ์ด ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ".java" ํ์ฅ์๋ฅผ ๊ฐ์ง๋ค.
2๏ธโฃ ์ปดํ์ผ
์์ค ์ฝ๋๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ๋ ์์ ์ ์ปดํ์ผ์ด๋ผ๊ณ ํ๋ค. ์ด ์์ ์ javac๋ผ๋ Java ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ค. ์ด ๋จ๊ณ์์ ์ปดํ์ผ๋ฌ๋ ์์ค ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ถ์ํ ํ, ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ์ฌ ".class" ํ์ฅ์๋ฅผ ๊ฐ์ง ํด๋์ค ํ์ผ์ ์์ฑํ๋ค.
3๏ธโฃ ํด๋์ค ๋ก๋ฉ
JVM์ ํด๋์ค ํ์ผ์ ๋ก๋ฉํ๋ค. ํด๋์ค ๋ก๋๋ ํด๋์ค ํ์ผ์ ์ฝ์ด๋ค์ฌ JVM์ด ์ดํดํ ์ ์๋ ํํ๋ก ๋ณํํ๋ค. JVM ๋ด๋ถ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํด Execution Engine์ด ํ์ํ ํด๋์ค๋ค์ Class Loader์ ์์ฒญํ๊ณ Class Loader๊ฐ ๋ฐ์ดํธ์ฝ๋์ .class์์ ๊ฐ์ ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค. (๋ก์ปฌ ๋์คํฌ์์ .class ํ์ผ์ ๊ฐ์ ธ์ฌ ์๋ ์์ง๋ง ๋คํธ์ํฌ๋ฅผ ํตํด์ ๊ฐ์ ธ์ฌ ์ ์๋ค. - URLClassLoader)
4๏ธโฃ ๋ฐ์ดํธ ์ฝ๋ ๊ฒ์ฆ
๊ฐ์ ธ์ค๋ ํด๋์ค๋ค์ ๋ฐ์ดํธ ์ฝ๋๋ค์ด ์ด์์ด ์๋์ง, ์๋ฐ์ ๋ณด์ ๊ท์น์ ์๋ฐฐํ์ง ์๋์ง ๊ฒ์ฌ๋ฅผ ํ๋ค. (์๋ฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํ์ฌ ์ ์ก๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์ปดํจํฐ๋ฅผ ํผ์์ํค๋ ๊ฒ์ ๋ฐฉ์ง ํ๊ธฐ ์ํด ์๊ฒฉํ ๋ณด์ ๊ท์น์ ๊ฐ๊ณ ์๋ค.)
5๏ธโฃ ์คํ
Execution Engine์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๊ณ ์คํํ๋ค. ์คํํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ค. ๊ณ์ ์ด๋ฌํ ๋์์ ํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ค.
'๐ป Extracurricular > ๋ฉ์์ด์ฌ์์ฒ๋ผ11๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์ฃผ์ ์ธ๋ฏธ๋ 1์ฐจ] ๋ธ๋กํน-๋ ผ๋ธ๋กํน / ๋๊ธฐ - ๋น๋๊ธฐ (0) | 2023.04.05 |
---|---|
[3์ฃผ์ฐจ] Java ๊ณผ์ (1) (0) | 2023.04.05 |
[2์ฃผ์ฐจ] HTML && CSS && JavaScript (0) | 2023.04.05 |
[1์ฃผ์ฐจ] Shell ๊ณผ์ (0) | 2023.03.23 |
[0์ฃผ์ฐจ] WSL2 ์ค์น / ๋ฆฌ๋ ์ค(์ฐ๋ถํฌ) ์ฌ์ฉ (0) | 2023.03.11 |