목차
1. 클래스 로딩과 실행
2. 스태틱 초기화 블럭
3. 인스턴스 초기화 블럭
java.exe : 컴파일러 프로그램을 실행한다.
= 실행중인 프로그램 = 실행중인 app
가 된다.process가 OS에게 실행되는 동안 데이터를 보관할 때 사용할 메모리를 달라고 요청 한다.
OS가 H/W인 RAM에서 메모리를 할당해 오는것을 허가한다.
process가 메모리를 사용한다.
JVM은 OS에게 할당받은 메모리를 크게 3구획으로 나눠서 관리한다.
static 필드
나 static 메서드
를 사용할 때인스턴스
를 생성할 때(new
명령을 실행할 때)static {}
인스턴스 초기화 블럭 (instance initializer) : {}
인스턴스 변수 : non-static 변수
class A {
int a;
int b;
static int c;
}
일 때
A obj1 = new A();
A obj2 = new A();
라고 하면
"Method Area" 영역에
1) A클래스가 로딩된다.
2) static 변수가 로딩된다. (=c)
"JVM Stack" 영역에
3) 로컬변수 obj1, obj2 가 생성됨
"Heap" 영역에
4) a, b를 인자로 하는 obj1이 가리키는 인스턴스와
5) a, b를 인자로 하는 obj2이 가리키는 인스턴스를 생성.
* 메서드는 static 이든 아니든 Method Area영역에 생긴다.
* Heap영역에는 절대로 없다.