wannaDevelopIt 2022. 12. 1. 15:00
728x90

scope + block scope 정리

 

mutable vs immutable 정리

 

어제 배운 JVM 구조 및 메모리와 코드의 흐름 재수강 및 복습

  • JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함하고 있다.

JVM의 구동방식

1. JRE의 Main 메서드 탐색 == true => JVM 부팅

2. 부팅된 JVM의 첫 번째 임무수행 : 전처리 + T 메모리

1) java.lang 패키지를 스태틱 영역(클래스 놀이터)에 배치한다.

2) import된 패키지를 스태틱 영역에 배치한다.

3) 다른 모든 클래스를 스태틱 영역에 배치한다.

3. Main 메서드의 스택 프레임을 스택 영역에 배치한다.

4. 메서드의 인자 args를 저장한 변수 공간을 스택 프레임의 맨 밑에 확보한다.

(메서드 인자들의 변수 공간을 스택 영역에 할당)

5. main 메서드 안의 명령문 실행

 

+JVM의 종료방식

명령문은 코드 실행 영역(메모리(Runtime Data Area)의 다른 부분)에서 실행(의뢰) -> T 메모리엔 변화 없음

닫는 중괄호로 스택 영역의 Main 메서드의 스택 프레임 소멸 ~

T 메모리에는 스태틱 영역의 클래스가 남아있는 상태로 JVM 종료, JRE 종료, T메모리 소멸

 

클래스 로더 시스템

Loading -> Linking -> Initialization

1. Loading

클래스 로더가 .class 파일을 읽고 데이터를 "Method Area"에 저장

데이터 == FQCN, 클래스/인터페이스/Enum(상수집합)

 

2. Initialization

Static 초기화, Static 블럭 실행

class Practice {
    public static String STATIC_MESSAGE = "응애";

    static {
        System.out.println("I'm Loading");
        System.out.println(STATIC_MESSAGE + "2");
    }
}

public class Main {
    public static void main(String[] args) {
        String staticMessage = Practice.STATIC_MESSAGE;

        System.out.println("Hello");

        System.out.println(staticMessage);
    }
}

// 스태틱 블럭이 실행된 후 메인메서드에서 변수 SM에 Practice 클래스의 S_M 할당. 그 후 Hello와
// Static의 영향을 받지 않은 지역 변수 S_M이 할당된 SM이 출력된다.

 

728x90