002.메모리 영역과 로딩

Cornchip·2022년 9월 17일
0

bitcamp

목록 보기
2/11
post-thumbnail

목차
1. 클래스 로딩과 실행
2. 스태틱 초기화 블럭
3. 인스턴스 초기화 블럭



1. 클래스 로딩과 실행

1) 클래스 로딩과 실행 순서

  1. .class 파일 찾는다
  2. Bytecode 검증
  3. Method Area에 로딩
  4. 스태틱 필드 생성
  5. 스태틱 블록 실행
  6. main() 호출

2) process와 메모리

  1. java.exe : 컴파일러 프로그램을 실행한다.

    • 프로그램 = application s/w
    • 이 app을 실행시키면 java.exe는 프로세스= 실행중인 프로그램 = 실행중인 app가 된다.
  2. process가 OS에게 실행되는 동안 데이터를 보관할 때 사용할 메모리를 달라고 요청 한다.

  3. OS가 H/W인 RAM에서 메모리를 할당해 오는것을 허가한다.

  4. process가 메모리를 사용한다.

  5. JVM은 OS에게 할당받은 메모리를 크게 3구획으로 나눠서 관리한다.

    1. Method Area
    2. JVM Stack (스레드 당 하나)
    3. Heap


2. 스태틱 초기화 블럭

1) 클래스가 로딩되는 경우

  1. static 필드static 메서드를 사용할 때
  2. 인스턴스를 생성할 때(new 명령을 실행할 때)

2) static 문장

  • 스태틱 초기화 블럭 (static initializer) : static {}
  • 클래스 변수 : static 변수


3. 인스턴스 초기화 블럭

1) non-static 문장

  • 인스턴스 초기화 블럭 (instance initializer) : {}

    • 생성자가 없어도 만들 수 있고, 생성자가 있으면 생성자의 앞 부분에 삽입된다.
    • 필드 초기화 문장은 무조건 블럭의 제일 앞 문장으로 간다.
  • 인스턴스 변수 : non-static 변수

2) 변수 초기화와 메모리영역

    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영역에는 절대로 없다.
profile
cornchip

0개의 댓글