JVM ์ ๋ํด์
โข
์๋ฐ ํ๋ก๊ทธ๋จ ์คํํ๊ฒฝ์ ๋ง๋ค์ด ์ฃผ๋ ์ํํธ์จ์ด
โข
์๋ฐ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ .class ๋ฐ์ดํธ ์ฝ๋๋ก ๋ง๋ค๋ฉด ์ด ์ฝ๋๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ ํ๊ฒฝ์์ ์คํ
โข
Java๋ ํ๋ซํผ์ ์ข
์์ ์ด์ง ์์ง๋ง JVM์ ํ๋ซํผ์ ์ข
์์
โข
interpreter ๋ฐฉ์ JIT ๋ฐฉ์ ํผ์ฉ
โฆ
interpreter ๋ฐฉ์: ํ ์ค์ฉ ํด์, ์คํ
โฆ
JIT ๋ฐฉ์:
โช
๋ฐ์ดํธ์ฝ๋๋ฅผ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ด์ฉํด ํ๋ก๊ทธ๋จ์ ์ค์ ์คํํ๋ ์์ (๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์์ )์ ๊ฐ OS์ ๋ง๋ Native Code๋ก ๋ณํ
โช
JIT ์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ์ง ์๊ณ , ์คํํ ๋ ์ปดํ์ผ์ ํ๋ฉด์ ํด๋น ์ฝ๋๋ฅผ ์บ์ฑํด๋ฒ๋ฆฝ๋๋ค. ์ดํ์๋ ๋ฐ๋ ๋ถ๋ถ๋ง ์ปดํ์ผํ๊ณ , ๋๋จธ์ง๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ์ฌ์ฉ
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์ ์๋๊ณผ ์ค๋ ๋ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
JVM ๋ด๋ถ ๊ตฌ์กฐ
โข
ํด๋์ค ๋ก๋(Class Loader)
โฆ
ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ ๋ฐํ์์์์ผ ๋ชจ๋ ์ฝ๋๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ ๊ณผ ์ฐ๊ฒฐ
โฆ
๋์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ก๋ฉํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ํด๋์ค ๋ก๋(class loader)
โฆ
JVM์ด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Areas์ Method Area์ ๋ฐฐ์น
โข
์คํ ์์ง(Execution Engine)
โฆ
๋ก๋๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐํ์ ๋ชจ๋์ด ์คํ ์์ง
โข
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ (Runtime Data Area)
โฆ
JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํ๋ ์์ญ
โข
๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector)
โฆ
๋๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์
โฆ
๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ฏ๋ก, ๋์ฑ ์์ฝ๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋๋ก ๋๋๋ค.
โฆ
Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ(์ ์ฌ)๋ ๊ฐ์ฒด๋ค ์ค์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ฉฐ ํด๋น ์ญํ ์ ํ๋ ์๊ฐ์ ์ ํํ ์ธ์ ์ธ์ง๋ฅผ ์ ์ ์์ต๋๋ค.
โฆ
GC์ญํ ์ ์ํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ค๋ ๋๋ค์ ์ผ์์ ์ง์ํ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
โข
ํ ์์ญ, ๋ฉ์๋ ์์ญ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉ
๋ฉ์๋ ์์ญ(Method Area)
โข
ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์
, ์ ๊ทผ ์ ์ด์ ์ ๋ณด์ ๊ฐ์ ๊ฐ์ข
ํ๋ ์ ๋ณด
โข
๋ฉ์๋ ์ ๋ณด, ๋ฐ์ดํฐ Type ์ ๋ณด, Constant Pool, static๋ณ์, final class ๋ฑ์ด ์์ฑ๋๋ ์์ญ
ํ ์์ญ (Heap Area)
โข
new ํค์๋๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์์ฑ๋๋ ์์ญ
โข
์ฃผ๊ธฐ์ ์ผ๋ก GC๊ฐ ์ ๊ฑฐํ๋ ์์ญ
โข
์คํ ์์ญ, PC ๋ ์ง์คํฐ, ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉ (GC์ ๋์)
์คํ ์์ญ(Stack Area)
โข
์ง์ญ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ, ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ์์ ๊ฐ ๋ฑ์ด ์์ฑ๋๋ ์์ญ
PC ๋ ์ง์คํฐ (PC Register)
โข
Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์ฆ ํ์ฌ ์ค๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช
๋ น์ ์ ์ฅํ๊ณ ์๋ ์์ญ
๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ(Native Method Stack)
1.
์๋ฐ ์ด์ธ์ ์ธ์ด(C, C++, ์ด์
๋ธ๋ฆฌ ๋ฑ)๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์ผ๋ฐ์ ์ธ C ์คํ์ ์ฌ์ฉํฉ๋๋ค.
2.
๋ณดํต C/C++ ๋ฑ์ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ์ํ ์คํ์ ๋งํ๋ฉฐ (JNI) ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฝ๊ณ ํด์ํ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ์๋ฐ ์ธํฐํ๋ฆฌํฐ(interpreter)
๊ฐ๋น์ง ์ปฌ๋ ํฐ
โข
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก JVM์ Heap ์์ญ์์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ํ์ ์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋ ํ๋ก์ธ์ค
โข
์ฐธ์กฐ๊ฐ ํด์ ๋ ๊ฐ์ฒด(unreachable)๊ฐ GC ๋์
์ฅ์
โข
๊ฐ๋ฐ์ ์
์ฅ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak) ๋ฌธ์ ์์ ๋ํด ์๋ฒฝํ๊ฒ ๊ด๋ฆฌํ์ง ์์๋ ๋์ด ์ค๋กฏ์ด ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ค๋ ์ฅ์
๋จ์
โข
๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋์ง ์ ํํ๊ฒ ์ ์ ์๋ค.
โข
๊ฐ๋น์ง ์ปฌ๋ ์
(GC)์ด ๋์ํ๋ ๋์์๋ ๋ค๋ฅธ ๋์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
Mark and Sweep ์๊ณ ๋ฆฌ์ฆ
โข
Mark ๊ณผ์ : ๋จผ์ Root๋ก๋ถํฐ ๊ทธ๋ํ ์ํ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค์ ์ฐพ์๋ด์ด ๊ฐ๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ ์กฐํ๊ณ ์๋์ง ์ฐพ์์ ๋งํนํฉ๋๋ค.
โข
Sweep ๊ณผ์ : ์ฐธ์กฐํ๊ณ ์์ง ์์ ๊ฐ์ฒด ์ฆ Unreachable ๊ฐ์ฒด๋ค์ Heap์์ ์ ๊ฑฐํฉ๋๋ค.
โข
Compact ๊ณผ์ : Sweep ํ์ ๋ถ์ฐ๋ ๊ฐ์ฒด๋ค์ Heap์ ์์ ์ฃผ์๋ก ๋ชจ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ผ๋ก ์์ถํฉ๋๋ค. (๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ข
๋ฅ์ ๋ฐ๋ผ ํ์ง ์๋ ๊ฒฝ์ฐ๋ ์์)
GC ๋์ ๊ณผ์
1.
๊ฐ์ฒด๊ฐ ์ฒ์ ์์ฑ๋๊ณ Heap์์ญ์ Eden์ age-bit 0์ผ๋ก ํ ๋น๋ฉ๋๋ค. ์ด age-bit๋ Minor GC์์ ์ด์๋จ์ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ
2.
์๊ฐ์ด ์ง๋ Heap Area์ Eden ์์ญ์ ๊ฐ์ฒด๊ฐ ๋ค ์์ด๊ฒ ๋๋ฉด Minor GC๊ฐ ํ๋ฒ ์ผ์ด๋๊ฒ ๋๊ณ ์ฐธ์กฐ ์ ๋์ ๋ฐ๋ผ Servivor0 ์์ญ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ํ์
3.
๊ณ์ํด์ Eden์์ญ์๋ ์ ๊ท ๊ฐ์ฒด๋ค์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ Eden์์ญ์ ๊ฐ์ฒด๊ฐ ๋ค ์์ด๊ฒ ๋๋ฉด Young Generation(Eden+Servivor) ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ ๋น์ด์๋ 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๊ฐ ์คํ๋ฉ๋๋ค. ์ด๋ ๊ฒ Old generation์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ GC๋ฅผ Major GC๋ผ๊ณ ํฉ๋๋ค. Major GC๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ด๊ณ ์ด๋ GC๋ฅผ ์คํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ ์์
์ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ 'Stop-the-World'
Heap Area
Young Generation ์์ญ
โข
์๋ฐ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ง์ ์ ์ฅ๋๊ณ , ์๊ธด์ง ์ผ๋ง ์๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
โข
Heap ์์ญ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ์ต์ด๋ก Eden ์์ญ์ ํ ๋น
โข
์ด ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ๋ ์์ด๊ฒ ๋๋ฉด ์ฐธ์กฐ์ ๋์ ๋ฐ๋ผ Servivor์ ๋น ๊ณต๊ฐ์ผ๋ก ์ด๋๋๊ฑฐ๋ ํ์
โข
Young Generation(Eden+Servivor) ์์ญ์ด ์ฐจ๊ฒ ๋๋ฉด ๋ ์ฐธ์กฐ์ ๋์ ๋ฐ๋ผ Old์์ญ์ผ๋ก ์ด๋ ๋๊ฒ ๋๊ฑฐ๋ ํ์
โข
์ด๋ ๊ฒ Young Generation๊ณผ Tenured Generation ์์์ GC๋ฅผ Minor GC
โข
Old์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉ์น๋ฅผ ๋๊ฒ ๋๋ฉด, Old ์์ญ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ๊บผ๋ฒ์ ์ญ์ ํ๋ GC๊ฐ ์คํ
โข
์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ด๊ณ ์ด ๋ GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ ์์
์ ๋ฉ์ถค. ์ด๋ฅผ 'Stop-the-World'
โข
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ 'Stop-the-World'๊ฐ ๋ฐ์ํ๊ณ Old์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ GC๋ฅผ Major GC