โ๏ธโRuntime Data Area
๐ก Java ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
1. Method Area
2. Heap
3. Stack
4. PC Register
5. Native Method Stack
Stack, PC Register, Native Method Stack์ Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ์๋ก ์์ฑ๋์ด Thread์ ํ ๋น๋๊ณ , Heap๊ณผ Method Area๋ JVM์ด ์์๋ ๋ ํ ๋ฒ ํ ๋น๋์ด ๋ชจ๋ Thread๊ฐ ๊ณต์ ํ๋ค.
โ๏ธโMethod Area
โ๏ธ โ๋ฉ์๋ ์์ญ (Method Area) ์ด๋?
๐ก ํด๋์ค ๋ก๋์ ์ํด ๋ก๋๋ ํด๋์ค ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- JVM์ด ์์๋ ๋ ์์ฑ๋๋ฉฐ, JVM์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง๋ฉ๋๋ค.
- ํด๋์ค์ ๋ํ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ Method Area๋ฅผ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
- ๋ฐ๋ผ์ ๋ชจ๋ Thread๊ฐ Method Area๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- Method Area๋
Type Information
, Runtime Constant Pool
, Field Information
, Method Information
, Class Variable
์ด Metadata๋ก ์ ์ฅ๋ฉ๋๋ค.
โMetadata ๋
โ๏ธโHeap
Heap
โ๏ธ โํ ์์ญ (Heap) ์ด๋?
๐ก new
ํค์๋๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- JVM์ด ์์๋ ๋ ์์ฑ๋๋ฉฐ, JVM์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง๋ฉ๋๋ค.
- ๋ชจ๋ Thread๊ฐ ๊ณต์ ํฉ๋๋ค.
- GC(Garbage Collector) ์ ๋์์ด ๋๋ ๊ณต๊ฐ์
๋๋ค.
Person person = new Person("GilDong", 30);
โ๏ธโStack
โ๏ธ โ์คํ ์์ญ (Stack)์ด๋?
๐ก ๊ฐ ์ค๋ ๋๋ง๋ค ๋ฉ์๋ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- ๋ฉ์๋ ํธ์ถ ์๋ง๋ค ํ๋ ์(Frame)์ด๋ผ ๋ถ๋ฆฌ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์คํ์ push๋๊ณ , ๋ฉ์๋ ์ข
๋ฃ ์ pop๋ฉ๋๋ค.
โํ๋ ์ ์ด๋
- ๊ฐ ์ค๋ ๋๋ ๋ณ๋์ ์คํ์ ๊ฐ์ง๋ฉฐ, ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ ํจ๊ป ์์ฑ๋ฉ๋๋ค.
- ์คํ์ ํ์
์ ์ถ(LIFO, Last In First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ฌ๊ท ํธ์ถ๊ณผ ๊ฐ์ ๋ฉ์๋ ํธ์ถ์ด ์คํ์ ์ฌ์ฉํฉ๋๋ค.
โ๏ธโPC Register
โ๏ธ โPC ๋ ์ง์คํฐ (Program Counter Register) ๋?
๐ก ํ์ฌ ์คํ ์ค์ธ JVM ๋ช
๋ น์ด์ ์ฃผ์๋ฅผ ์ ์ฅ
- ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ๋ช
๋ น์ด๊ฐ ์คํ๋ ํ, ๋ค์ ์คํํ ๋ช
๋ น์ด์ ์ฃผ์๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
- ๊ฐ Thread ๋ง๋ค ๋ณ๋์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง๋๋ค.
- JVM ๋ช
๋ น์ด์ ์คํ ์์๋ฅผ ์ ์ดํฉ๋๋ค.
public class Example {
public static void main(String[] args) {
int a = 5;
int b = 10;
int sum = a + b;
System.out.println(sum);
}
}
โ๏ธโNative Method Stack
โ๏ธ โ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ (Native Method Stack) ์ด๋?
๐ก Java ํ๋ก๊ทธ๋จ์ด C, C++ ๋ฑ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- Java ํ๋ก๊ทธ๋จ์ด C, C++ ๋ฑ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ฑ๋ฅ์ด๋ ํน์ ๊ธฐ๋ฅ ๋๋ฌธ์ Java๋ง์ผ๋ก ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ์์
์ ๋ค๋ฅธ ์ธ์ด(C, C++ ๋ฑ)๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ํตํด ์ํํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- JVM์ด ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, JNI๋ฅผ ํตํด ๋ค์ดํฐ๋ธ ๋ฉ์๋ ์คํ์ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
์ฐธ์กฐ