Runtime Data Area
JVM์ Runtime Data Areas
JVM์ Runtime Data Areas๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ค์ JVM์ ์ฑ๋ฅ ๋ฐ ์์ ์ฑ์ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Runtime Data Areas๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ก ๋๋ฉ๋๋ค:
PC Registers: ๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ฉฐ, ํ์ฌ ์คํ ์ค์ธ JVM ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ์ ์ฅํฉ๋๋ค.
Java Virtual Machine Stacks: ๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ฉฐ, ๋ฉ์๋ ํธ์ถ ์๋ง๋ค ์์ฑ๋๋ ์คํ ํ๋ ์์ ์ ์ฅํฉ๋๋ค. ๊ฐ ์คํ ํ๋ ์์๋ ์ง์ญ ๋ณ์, ์ด์ ์คํ, ํ๋ ์ ๋ฐ์ดํฐ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
Native Method Stacks: JNI๋ฅผ ํตํด ํธ์ถ๋๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋์ ์คํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด ์คํ๋ ๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํฉ๋๋ค.
Method Area: ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ํด๋์ค์ ์ธํฐํ์ด์ค ๋ฉํ๋ฐ์ดํฐ, ์ ์ ๋ณ์, ์์ ํ ๋ฑ์ ์ ์ฅํฉ๋๋ค. HotSpot JVM์์๋ Permanent Generation(PermGen) ๋๋ Metaspace๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค.
Heap: ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ๊ฐ์ฒด ์ธ์คํด์ค์ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค. ํ์ Young Generation๊ณผ Old Generation์ผ๋ก ๋๋๋ฉฐ, Young Generation์ Eden๊ณผ ๋ ๊ฐ์ Survivor ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ์ฒด๋ ์ฒ์์ Eden์ ์์ฑ๋๊ณ , ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด์ Survivor ์์ญ๊ณผ Old Generation์ผ๋ก ์ด๋ํฉ๋๋ค.
์ด์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
PC Registers
PC Registers๋ Program Counter Registers์ ์ฝ์๋ก, ๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํฉ๋๋ค. ๊ฐ ์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ ํ๋ฆ์ ๊ฐ์ง๋ฉฐ, PC ๋ ์ง์คํฐ๋ ํ์ฌ ์คํ ์ค์ธ JVM ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ ์ค๋ ๋๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์ฝ ์ค๋ ๋๊ฐ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์คํ ์ค์ด๋ผ๋ฉด, ์ด ๋ ์ง์คํฐ๋ ์ ์๋์ง ์์ ์ ์์ต๋๋ค.
Java Virtual Machine Stacks
Java Virtual Machine Stacks๋ ์๋ฐ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์์ฑ๋๋ ์คํ ํ๋ ์์ ์ ์ฅํฉ๋๋ค. ๊ฐ ์ค๋ ๋๋ ํ๋์ JVM ์คํ์ ๊ฐ์ง๋ฉฐ, ์ด ์คํ์ ๋ฉ์๋ ํธ์ถ๊ณผ ๋ฐํ์ ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์คํ ํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค:
Local Variables: ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ฅํฉ๋๋ค.
Operand Stack: ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ์ค๊ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค.
Frame Data: ๋ฉ์๋ ํธ์ถ ์ ํ์ํ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
JVM ์คํ์ ์ค๋ ๋์ ์ข ์์ ์ด๋ฏ๋ก, ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด JVM ์คํ๋ ํด์ ๋ฉ๋๋ค.
Native Method Stacks
Native Method Stacks๋ ์๋ฐ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค(JNI)๋ฅผ ํตํด ํธ์ถ๋๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋์ ์คํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ ์ค๋ ๋๋ ํ๋์ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ๊ฐ์ง๋ฉฐ, ์ด๋ JVM์ด ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์คํ์ JVM์ ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ์ผ๋ถ JVM์ ์ผ๋ฐ์ ์ธ JVM ์คํ๊ณผ ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ํตํฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Method Area
Method Area๋ JVM์ด ์์๋ ๋ ์์ฑ๋๋ฉฐ, ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค. ์ด ์์ญ์ ํด๋์ค์ ์ธํฐํ์ด์ค์ ๋ฉํ๋ฐ์ดํฐ, ์ ์ ๋ณ์, ์์ ํ ๋ฑ์ ์ ์ฅํฉ๋๋ค. ํด๋์ค ๋ก๋๊ฐ ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ๋, ํด๋น ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ์ ์ ์ ๋ณ์๊ฐ ์ด ์์ญ์ ์ ์ฅ๋ฉ๋๋ค.
HotSpot JVM์์๋ Method Area๋ฅผ Permanent Generation(PermGen) ๋๋ Metaspace๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ตฌํํฉ๋๋ค. PermGen์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ๋ฐ๋ฉด, Metaspace๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋์ ์ผ๋ก ํ์ฅ ๋ฐ ์ถ์๋ ์ ์์ต๋๋ค.
Heap
Heap์ JVM์ ๊ฐ์ฅ ํฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํฉ๋๋ค. ์ด ์์ญ์ ๊ฐ์ฒด ์ธ์คํด์ค์ ๋ฐฐ์ด์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ ํฌ๊ฒ Young Generation๊ณผ Old Generation์ผ๋ก ๋๋ฉ๋๋ค.
Young Generation: ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ ์์ญ์ ๋๋ค. Young Generation์ ๋ค์ Eden๊ณผ ๋ ๊ฐ์ Survivor ์์ญ์ผ๋ก ๋๋ฉ๋๋ค. ๊ฐ์ฒด๋ ์ฒ์์ Eden์ ์์ฑ๋๋ฉฐ, ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด์ Survivor ์์ญ์ ๊ฑฐ์ณ Old Generation์ผ๋ก ์ด๋ํฉ๋๋ค.
Eden: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ ์์ญ์ ๋๋ค.
Survivor: Eden์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ ๋ ๊ฐ์ ์์ญ์ผ๋ก, ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
Old Generation: Young Generation์ ๊ฑฐ์ณ ์ค๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ์์ญ์ ๋๋ค. ์ด ์์ญ์ Full GC์ ๋์์ด ๋ฉ๋๋ค.
์์ ์ฝ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
๋ค์์ ์์ ์ฝ๋๋ฅผ ํตํด Runtime Data Areas์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ค๋ช ํ ๊ฒ์ ๋๋ค:
์ด ์์ ์ฝ๋์์ ๋ณ์๋ค์ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋ฉ๋๋ค:
ci
์cs
: Method Area์ Class Variable ์์ญ์ ํ ๋นmi
์ms
: Heap์ ์์ฑ๋ Instance์ ํ ๋นpi
์ps
,li
์ls
: Java Virtual Machine Stacks์ Local Variable ์์ญ์ ํ ๋น
์ด์ ๊ฐ์ด JVM์ Runtime Data Areas๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ ์ค์ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ์ฅํ๊ธฐ ์ํด ์ค๊ณ๋ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค. ๊ฐ ์์ญ์ ํน์ ํ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, JVM์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Last updated