✏️ Scope
Memory 에 올라온 각 상수나 변수등의 요소들이 허용된 영역, 또는 범위를 Scop 라고 한다.
✏️ Memory
Program 을 실행시키기 위한 작업 공간
- Program 을 실행시키기 위해선 Process 가 필요로 하는 재료가 Memory 에 올라와 있어야 한다.
📍 Memory 의 저장 공간 분할
-
Code
- 실행 명령을 포함하는 Program 의 코드가 저장되는 공간
-
Data (Method Area)
- Class 정보, Static, Global, 전역변수 등 정적 변수들이 저장되는 공간
- 코드가 컴파일 될 때 Data 에 저장될 변수의 크기만큼 공간이 할당되고,
Process 가 종료될 때 까지 변화되지 않는다.
- Data 에 저장된 정적 Class 의 정적 변수들은 Class 의 객체를 생성하지 않아도 코드내의 어디든 선언될 수 있다.
- 모든 쓰레드에서 정보가 공유된다.
-
Heap
- 동정 메모리가 저장되는 공간
- new 연산자로 생성한 객체가 저장된다.
- 그 객체를 변수에 담으면 변수는 Heap 이 아닌 Stack 에 저장된다.
- Stack 에 저장된 변수는 Heap 에 저장된 객체를 가르키는 주소값을 가지고 저장된다.
- 마찬가지로 배열의 index 값들은 Heap 에 저장되고, 배열을 담는 변수는 Stack 에 저장되 Heap 을 참조하는 구조를 갖고있다.
- Heap 에 저장된 data 는 가비지 컬렉터가 처리하지 않는 이상 소멸되지 않는다.
- 모든 쓰레드에서 정보가 공유된다.
- Stack
- 지역변수, 매개변수, 반환갑 , Heap 에 있는 data 를 호출하는 method 등
일시적인 data 가 저장되는 공간
- 작동되고있는 코드 구절이 끝나면 가비지 컬렉션에 의해 관리가 된다.
- 쓰레드 마다 하나씩 존재한다.